Laravel自定义created_at和updated_at

时间:2018-04-06 21:53:43

标签: php laravel eloquent laravel-eloquent

我试图覆盖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)"

还有什么需要做才能让它发挥作用吗?

2 个答案:

答案 0 :(得分:7)

默认情况下,

latest()始终使用created_at。您必须自己指定列名称:

Visit::latest(Visit::CREATED_AT)->get();

您可以通过向Visit模型添加local scope来覆盖默认行为:

public function scopeLatest($query)
{
    return $query->orderByDesc(static::CREATED_AT);
}

更新:这将在Laravel 5.7中修复:https://github.com/laravel/framework/pull/24004

答案 1 :(得分:0)

因为默认情况下最新获取created_at,请查看此处here 与您和相同代码相同的问题