You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel自定义created_at/updated_at后使用latest()报错问题

解决Laravel Eloquent自定义时间字段后latest()方法报错问题

这个问题很常见,原因在于Laravel的latest()查询构建器方法默认硬编码使用'created_at'作为排序字段,并不会自动识别你在模型中重写的CREATED_AT常量。所以当你调用无参数的latest()时,它还是会尝试按created_at列排序,而你的表中只有creation_date列,自然就报"未知列"错误了。

这里有两种简单的解决方式:

方法一:调用latest()时显式指定自定义字段

直接在latest()方法中传入你定义的创建时间字段名即可:

dd(Visit::latest('creation_date')->get());

这种方式简单直接,适合偶尔需要使用的场景。

方法二:重写模型的latest()方法,统一默认行为

如果你希望模型的latest()方法默认就使用自定义的creation_date字段,可以在Visit模型中重写这个方法,让它优先使用模型定义的创建时间常量:

namespace App;
use Illuminate\Database\Eloquent\Model;

class Visit extends Model {
    const CREATED_AT = 'creation_date';
    const UPDATED_AT = 'last_update';

    public function latest($column = null)
    {
        // 如果没有传入字段,就使用模型定义的创建时间字段
        return parent::latest($column ?? $this->CREATED_AT);
    }
}

之后再直接调用Visit::latest()->get()就不会报错了,它会自动使用creation_date作为排序字段。

另外补充一点:如果你还用到了oldest()方法,也会遇到同样的问题,用同样的方式重写即可,把字段换成$this->CREATED_AT就行。

内容的提问来源于stack exchange,提问作者Zach Abrams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:37:40