Laravel 9日期格式修改及Call to a member function dateFormat()错误解决
问题修复:Call to a member function dateFormat() on string
错误原因
$req->input('StartOn')获取到的是字符串类型,而dateFormat()是Carbon日期实例的专属方法,直接调用会触发类型错误。
修复方案一:手动用Carbon转换日期格式
直接将请求中的日期字符串转为Carbon实例,再格式化为你需要的Y-m-d(四位年-月-日)格式:
修改控制器中的对应代码:
// 替换原来的$collection->StartOn = ...这一行 $collection->StartOn = \Carbon\Carbon::parse($req->input('StartOn'))->format('Y-m-d');
如果请求传入的日期格式是非标准格式(比如dd/mm/yyyy),可以指定解析格式:
// 示例:假设输入是"06/12/2022" $collection->StartOn = \Carbon\Carbon::createFromFormat('d/m/Y', $req->input('StartOn'))->format('Y-m-d');
修复方案二:利用Laravel模型自动处理日期
让Laravel自动完成日期字符串与Carbon实例的转换,同时统一数据库存储格式:
- 修改
Collection.php模型,添加日期字段声明并修正$dateFormat(原yy-mm-dd是两位年,改为Y-m-d匹配你要的四位年格式):
class Collection extends Model { use HasFactory; protected $table = 'Collection'; protected $primaryKey = 'IDCollection'; protected $guarded = []; // 修正为四位年的日期格式 protected $dateFormat = 'Y-m-d'; public $timestamps = false; // 指定需要自动处理的日期字段 protected $dates = ['StartOn', 'EndOn']; }
- 控制器中直接赋值即可,无需手动调用格式方法:
$collection->StartOn = $req->input('StartOn');
Laravel会自动将请求中的日期字符串解析为Carbon实例,再按模型指定的$dateFormat存入数据库。
内容的提问来源于stack exchange,提问作者tusi
相关产品推荐
相关产品推荐

