【问题标题】:Laravel custom created_at and updated_atLaravel 自定义 created_at 和 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)"

还有什么需要做的才能让它工作吗?

【问题讨论】:

    标签: php laravel eloquent laravel-eloquent


    【解决方案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 常量:
    【解决方案2】:

    因为最新获取 created_at 默认情况下检查这里可能是here 和你一样的问题,同样的代码

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-05
      • 2019-01-22
      • 2014-08-15
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      相关资源
      最近更新 更多