首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取随机模型的时间戳列值,而不知道Laravel中的列名

获取随机模型的时间戳列值,而不知道Laravel中的列名
EN

Stack Overflow用户
提问于 2021-07-13 20:56:24
回答 2查看 124关注 0票数 0

是否有一种方法可以在不知道时间戳列的名称的情况下获得Laravel中模型的时间戳列值,如'date_created‘& 'date_modified’?下面是我想使用这个函数的代码。

代码语言:javascript
运行
复制
function Timestamp($model, $id)
{
    $row = $model::find($id);
    $created = isset($row->created) ? $row->created : (isset($row->created_at) ? $row->created_at
        : (isset($row->created_on) ? $row->created_on : (isset($row->date_created) ? $row->date_created : '')));
    $updated = isset($row->updated) ? $row->updated : (isset($row->updated_at) ? $row->updated_at
        : (isset($row->updated_on) ? $row->updated_on : (isset($row->date_modified) ? $row->date_modified : '')));
    
    return 'The record was created on ' . $created . ' and updated on ' . $updated;
}

上面的代码非常长,如果新模型的时间戳列名不同,则需要添加额外的代码。因此,我想知道是否有任何方法在Laravel中提取时间戳列值,而不知道时间戳的列名(如果我们有模型和它们的记录ID )。问这个问题的原因是,有很多地方我使用时间戳,我不想破坏我的代码。当然,我可以将我的模型时间戳名称修改为类似的名称,或者在数据库中重命名列,但这只会打断许多页面中的大量代码,这只是为了使用不同的列名的函数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-26 20:00:55

在查阅了laravel的所有文档和代码之后,我得出结论,没有这样的方法可以直接得到模型的时间戳列,比如直接获取模型的主键的方法。但是,我发现了一些方法,可以结合起来得到值。这两种方法是

getCreatedAtColumn()/getUpdatedAtColumn() & "__get" (双下划线)

这就是我如何实现函数的方法。

代码语言:javascript
运行
复制
function Timestamp($model, $id)
    {
        $row = $model::find($id);
        $created = $row->__get($row->getCreatedAtColumn());
        $updated = $row->__get($row->getUpdatedAtColumn());
        
        return 'The record was created on ' . $created . ' and updated on ' . $updated;
    }

在这里,getCreatedAtColumn()/getUpdatedAtColumn()分别返回已创建和更新的列的名称,而__get方法返回它接收的列名的值。这个方法的好处是,如果没有时间戳列,我们就不必担心。如果时间戳设置为null,或者模型没有任何时间戳,此方法将自动返回null。

感谢大家提出的富有成效的建议。

票数 0
EN

Stack Overflow用户

发布于 2021-07-13 21:30:17

因此,我想知道是否有任何方法提取Laravel中的时间戳列值,而不知道时间戳的列名(如果我们有模型和它们的记录ID )。

不,不是方法。

但是你可以从模型中读到--至少是可以公开访问的部分-- 时间戳配置和我认为它就足够了:

  1. 验证$model是否使用时间戳
  2. $model列名用于CREATED_ATUPDATED_AT,而不是使用到目前为止的硬编码值(例如,将文字$row属性更改为类常量)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68369225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档