Laravel Eloquent模型存入数据库时日期日月颠倒问题排查求助
解决方案
该问题核心是数据库默认的日期字符串解析规则和Laravel生成的日期格式不匹配,从查询日志的方括号语法判断,大概率使用的是SQL Server类数据库,这类数据库部分版本会默认将Y-m-d格式的字符串优先按Y-d-m规则解析,最终导致月份和日期错位。可以按以下步骤修复:
步骤1:修改数据库连接配置(优先推荐)
打开项目config/database.php文件,找到你正在使用的数据库连接配置项(以SQL Server的sqlsrv连接为例),新增date_format配置,指定为无分隔符的通用安全日期格式,这种格式不会出现解析歧义:
'sqlsrv' => [ // 保留原有host、port、database等配置不变 'date_format' => 'Ymd His', ],
修改后删除之前在模型中单独添加的$dateFormat属性和getDateFormat()方法,避免配置优先级冲突。
步骤2:特殊场景兼容方案
如果使用的是Oracle、Access等其他有自定义日期格式要求的数据库,可通过模型修改器统一处理日期字段的写入格式:
// 在T_Appro模型中添加如下方法,按数据库实际可识别的格式调整format参数即可 public function setDATESTATUTAttribute($value) { $this->attributes['DATESTATUT'] = $value instanceof \DateTime ? $value->format('d/m/Y H:i:s') : $value; } // 原生维护的S_MODDATE字段也可通过修改器统一处理 public function setSMODDATEAttribute($value) { $this->attributes['S_MODDATE'] = $value instanceof \DateTime ? $value->format('d/m/Y H:i:s') : $value; }
修改后重新测试写入即可解决日期错位问题。
内容的提问来源于stack exchange,提问作者Florian
相关产品推荐
相关产品推荐

