Laravel 控制器返回嵌套列表时如何按指定user_id过滤关联订单数据
实现方案
你可以通过 Laravel 关联预加载的闭包过滤功能实现需求,分两种常用场景选择即可:
场景1:保留全部Item条目,仅过滤每个Item下的orders数据
该写法会返回所有Item,每个Item的orders字段仅保留匹配传入$user_id的订单,无匹配订单的Item对应的orders为空数组:
function get_orders($user_id){ $items = Item::with(['Order' => function($query) use ($user_id) { $query->where('user_id', $user_id); }])->get(); return $items; }
场景2:仅返回存在匹配订单的Item,同时过滤orders数据
该写法会先筛选出至少有一个符合$user_id条件订单的Item,再过滤关联的orders数据,不会返回orders为空的Item:
function get_orders($user_id){ $items = Item::with(['Order' => function($query) use ($user_id) { $query->where('user_id', $user_id); }])->whereHas('Order', function($query) use ($user_id) { $query->where('user_id', $user_id); })->get(); return $items; }
内容的提问来源于stack exchange,提问作者Sermed mayi
相关产品推荐
相关产品推荐

