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
相关产品推荐
相关产品推荐

