Laravel 自定义 created_at 和 updated_at
Posted
技术标签:
【中文标题】Laravel 自定义 created_at 和 updated_at【英文标题】:Laravel custom created_at and updated_at 【发布时间】:2018-09-16 23:50:49 【问题描述】:我正在尝试覆盖 created_at 和 updated_at 的 laravel eloquent 模型常量:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Visit extends Model
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
然后获取最新的条目:
dd(Visit::latest()->get());
但出现未知列错误:
"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'created_at' in
'order clause' (SQL: select * from `visits` order by `created_at` desc)"
还有什么需要做的才能让它工作吗?
【问题讨论】:
【参考方案1】:latest()
默认使用created_at
。您必须自己指定列名:
Visit::latest(Visit::CREATED_AT)->get();
您可以通过将local scope 添加到您的Visit
模型来覆盖默认行为:
public function scopeLatest($query)
return $query->orderByDesc(static::CREATED_AT);
更新:这将在 Laravel 5.7 中修复:https://github.com/laravel/framework/pull/24004
【讨论】:
就是这样,here's the source,列created_at
是硬编码的。
或者你可以做 Visit::latest('any_col_you_want')->get() ,但我喜欢 Jonas 的回答很好地把这一切联系在一起。
除了在 latest() 上指定列名之外,还有什么方法可以覆盖默认值?在源中那些默认值。在文档中,它说您可以逐个模型覆盖默认值。好像没用。
我扩展了我的答案。
谢谢!您是否对文档在此处引用的内容有任何线索:laravel.com/docs/5.6/eloquent 其中说:如果您需要自定义用于存储时间戳的列的名称,您可以在模型中设置 CREATED_AT 和 UPDATED_AT 常量: php class Flight extends Model const CREATED_AT = 'creation_date';常量 UPDATED_AT = 'last_update'; 【参考方案2】:
因为最新获取 created_at 默认情况下检查这里可能是here 和你一样的问题,同样的代码
【讨论】:
以上是关于Laravel 自定义 created_at 和 updated_at的主要内容,如果未能解决你的问题,请参考以下文章
使用 touch() 更新 laravel 中自定义时间戳字段的时间戳
Laravel 中 created_at 和 updated_at 列的优点是啥
laravel - 从数据库中删除 updated_at 和 created_at 列后,laravel 尝试插入它们
created_at 列中的时间不正确 - Laravel 5.4