Laravel中使用Carbon处理日期报错:Unexpected data found. Trailing data
解决Laravel中Carbon的"Unexpected data found. Trailing data"错误
问题根源
你的代码存在几个关键错误:
Licence::where(...)->get()返回的是Eloquent集合,不是单个日期值,直接传给Carbon::createFromFormat会因为类型不匹配触发错误pluck('time')返回的也是集合,addDays()方法需要传入整数类型的天数,不能传集合- 错误指定了日期格式:
created_at是datetime类型(格式为Y-m-d H:i:s),但你用了Y-m-d去解析,格式不匹配也会导致报错
修复后的代码
$packages = Package::find($id); // 获取单个许可证的created_at(如果只需要一条数据,用first()而非get()) $licence = Licence::where('tbl_package_id', $id) ->select('created_at') ->first(); // 直接使用Eloquent模型自带的Carbon实例,无需手动创建 $date = $licence->created_at; // 获取单个time值,用value()而非pluck(),返回整数 $addDays = Package::where('id', $request->input('tbl_package_id')) ->value('time'); // 添加天数 $updatedDate = $date->addDays($addDays);
额外说明
- Eloquent的datetime字段默认会自动转换为Carbon实例,所以不需要再用
Carbon::createFromFormat手动解析 - 如果需要处理多条许可证数据,要遍历集合逐个处理:
$licences = Licence::where('tbl_package_id', $id) ->select('created_at') ->get(); $addDays = Package::where('id', $request->input('tbl_package_id')) ->value('time'); foreach ($licences as $licence) { $updatedDate = $licence->created_at->addDays($addDays); // 这里可以添加保存或其他业务逻辑 }
内容的提问来源于stack exchange,提问作者user14500330
相关产品推荐
相关产品推荐

