Laravel控制器用Carbon计算用户创建天数返回JSON接口报错如何解决
问题原因及修复方案
核心错误点
User::all()执行后返回的是Eloquent集合对象,包含所有匹配的用户模型,集合本身没有created_at属性,直接调用$users->created_at会抛出属性不存在的错误,这是接口报错的根本原因。- 原逻辑只计算了一个全局日期差值,不符合「每条数据单独标注入库距今天数」的需求。
修复代码
你可以通过集合的map方法遍历每一条用户数据,给每个用户对象追加自定义的日期间隔字段:
use Carbon\Carbon; public function index() { $now = Carbon::now(); $users = User::all('first_name', 'last_name', 'profile_img', 'created_at') ->map(function ($user) use ($now) { // 追加数字类型的距今天数字段 $user->days_from_created = $user->created_at->diffInDays($now); // 追加"X天前"格式的人性化展示字段,不需要可以删除 $user->created_text = $user->created_at->diffForHumans($now); return $user; }); return response()->json(['data' => $users]); }
补充说明
Laravel默认会把created_at、updated_at等时间字段自动转为Carbon实例,不需要额外做类型转换就可以直接调用Carbon的相关计算方法。
内容的提问来源于stack exchange,提问作者Md Atiqur
相关产品推荐
相关产品推荐

