是否有一种方法可以在不知道时间戳列的名称的情况下获得Laravel中模型的时间戳列值,如'date_created‘& 'date_modified’?下面是我想使用这个函数的代码。
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 )。问这个问题的原因是,有很多地方我使用时间戳,我不想破坏我的代码。当然,我可以将我的模型时间戳名称修改为类似的名称,或者在数据库中重命名列,但这只会打断许多页面中的大量代码,这只是为了使用不同的列名的函数。
发布于 2021-07-26 20:00:55
在查阅了laravel的所有文档和代码之后,我得出结论,没有这样的方法可以直接得到模型的时间戳列,比如直接获取模型的主键的方法。但是,我发现了一些方法,可以结合起来得到值。这两种方法是
getCreatedAtColumn()/getUpdatedAtColumn() & "__get" (双下划线)
这就是我如何实现函数的方法。
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。
感谢大家提出的富有成效的建议。
发布于 2021-07-13 21:30:17
因此,我想知道是否有任何方法提取Laravel中的时间戳列值,而不知道时间戳的列名(如果我们有模型和它们的记录ID )。
不,不是方法。
但是你可以从模型中读到--至少是可以公开访问的部分-- 时间戳配置和我认为它就足够了:
$model
是否使用时间戳$model
列名用于CREATED_AT
和UPDATED_AT
,而不是使用到目前为止的硬编码值(例如,将文字$row
属性更改为类常量)。https://stackoverflow.com/questions/68369225
复制相似问题