如何通过现有控制器代码返回指定的JSON响应格式?
如何修改Laravel控制器代码返回指定JSON格式?
需求与现状
目标要返回的JSON格式:
{"data":[],"meta":{"paging":{"links":[],"total":0},"time":0.079}}
当前使用的控制器代码:
public function someMethod() { $var=SomeModel::with(['status' => function ($query) { $query->where('name', 'like', '%Pending Payment%'); }])->get(); return [ 'data' => $var, ]; }
目前实际得到的响应:
{"data":[]}
修改方案
直接在返回数组中补充meta结构,同时计算执行耗时、统计结果总数:
public function someMethod() { // 记录请求开始时间 $startTime = microtime(true); $var = SomeModel::with(['status' => function ($query) { $query->where('name', 'like', '%Pending Payment%'); }])->get(); // 计算接口执行耗时,保留三位小数 $executionTime = round(microtime(true) - $startTime, 3); return [ 'data' => $var, 'meta' => [ 'paging' => [ 'links' => [], 'total' => $var->count() // 获取当前查询结果的总数 ], 'time' => $executionTime ] ]; }
补充说明
- 如果后续需要实现分页功能(比如用
paginate()替代get()),total值可以替换为$var->total(),links数组也可以根据分页实例生成对应的分页链接; round()函数用于将耗时保留三位小数,和目标格式的0.079格式对齐;- 若不需要精确耗时,也可以直接固定写死
0.079,但建议用动态计算的方式更贴合实际场景。
内容的提问来源于stack exchange,提问作者Kevin Otieno
相关产品推荐
相关产品推荐

