Laravel中如何查询多关联模型并仅返回指定字段数据
Laravel关联查询指定字段并返回目标JSON结构
解决方案
修改查询代码,明确指定主表和关联表需要的字段,同时确保关联所需的外键/主键被包含,调整后的代码如下:
$data = Ticket::select('id', 'user_id', 'package_id', 'clinic_id', 'doctor_id', 'appointment_date', 'amount') ->with([ 'user' => fn($query) => $query->select('id', 'name'), 'package' => fn($query) => $query->select('id', 'name'), 'clinic' => fn($query) => $query->select('id', 'name', 'address'), 'doctor' => fn($query) => $query->select('id', 'name') ]) ->get(); return response()->json([ 'status' => 200, 'body' => [ 'limit' => $request->limit, 'offset' => $request->offset, 'data' => $data ] ], 200);
关键说明
- 主表字段选择:必须包含
id以及所有关联模型对应的外键(user_id、package_id等),否则Laravel无法建立主表与关联数据的关联关系,同时按需选择业务字段appointment_date、amount。 - 关联表字段选择:每个关联查询通过闭包指定要获取的字段,必须包含关联模型的主键(
id),否则关联数据无法正确映射到主表记录。 - 响应结构调整:移除了原代码中响应最外层的多余数组包裹,确保返回结构符合常规接口规范,同时匹配你期望的
data数组格式。
如果你的关联关系使用了非默认的外键名称,只需将主表select中的外键字段替换为实际名称即可。
内容的提问来源于stack exchange,提问作者MaditionSky
相关产品推荐
相关产品推荐

