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

Laravel中created_at显示异常:搜索PI时显示当前日期而非数据库值

解决PI搜索中created_at显示当前日期的问题

看起来你在搜索特定日期区间的PI时,结果里的created_at字段总是显示当前日期,而非数据库里存储的真实值。结合你给出的控制器代码片段,我整理了几个常见的排查方向和解决方案:

1. 检查Invoice模型的日期配置

你的模型可能存在自动修改created_at的逻辑:

  • 有没有自定义**修改器(mutator)**重写了created_at的值?比如这种错误写法:
    public function setCreatedAtAttribute($value)
    {
        $this->attributes['created_at'] = now();
    }
    
  • 有没有错误配置$dates或$casts属性,导致created_at被自动更新?

解决办法:删除错误的修改器,Laravel默认会自动处理created_at和updated_at,无需额外设置特殊修改逻辑。

2. 检查控制器的查询与数据处理逻辑

从你给出的代码片段看,你正确处理了from_date和to_date,但要确保查询后没有误改created_at的值。比如有没有写过类似$invoice->created_at = now();的代码?

正确的日期区间查询示例(假设模型为Invoice):

public function search_pi1(Request $request){
    $from_date = date("Y-m-d", strtotime($request->from_date));
    $to_date = date("Y-m-d", strtotime($request->to_date));
    
    // 补全时分秒,避免漏掉当天末尾的数据
    $invoices = Invoice::whereBetween('created_at', [
        $from_date . ' 00:00:00', 
        $to_date . ' 23:59:59'
    ])->get();
    
    return view('your-view-path', compact('invoices'));
}

3. 检查视图的显示逻辑

有时候问题出在视图层:你是不是在视图里误用了当前时间函数,而非调用模型的created_at属性?

错误示例:

{{ date('Y-m-d H:i:s') }}

正确示例(Laravel中created_at默认是Carbon实例):

{{ $invoice->created_at->format('Y-m-d H:i:s') }}
// 或者更简洁的写法
{{ $invoice->created_at->toDateTimeString() }}

4. 确认数据库字段设置

检查你的invoice表中created_at字段的类型是否为datetime/timestamp,且数据库层面没有设置“每次更新都覆盖为当前时间”的默认规则(Laravel默认只会在创建记录时赋值created_at)。

如果以上排查都没解决问题,可以把完整的控制器代码和模型代码贴出来,能更精准定位问题~

内容的提问来源于stack exchange,提问作者Anil Kumar Sahu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:16:24