Laravel Eloquent日期字段转换指定格式失效,原因何在?
问题原因及解决办法
原因
你在模型$casts里写的'some_date' => 'date:d-m-Y'是错误用法——Laravel的casts系统中,date类型的作用是把字段转换为Carbon日期实例,并不支持在类型后直接追加格式字符串。
框架无法识别这种非法的类型定义,会退回到默认的日期时间解析逻辑,把SQL Server的date字段当成带时间的类型处理,因此自动补全了不存在的00:00:00时间部分,格式也保持默认的YYYY-mm-dd。
解决办法
有两种靠谱的方式实现你要的dd-mm-YYYY格式:
方式1:单独字段用访问器
如果只需要修改some_date这一个字段的输出格式,给模型添加访问器:
use Carbon\Carbon; public function getSomeDateAttribute($value) { return Carbon::parse($value)->format('d-m-Y'); }
同时$casts可以保持为'some_date' => 'date'(或者也可以去掉,访问器会直接处理原始值)。
方式2:全局设置模型日期格式
如果希望模型所有日期字段都用这个格式输出,在模型里设置$dateFormat属性:
protected $dateFormat = 'd-m-Y'; protected $casts = [ 'some_date' => 'date', ];
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

