Laravel:如何在load方法中为关联的关联模型添加筛选条件
解决方案
你可以通过嵌套闭包或分层数组的方式,同时对SupplierProduct和关联的Product添加筛选条件,两种写法都能实现需求:
写法一:嵌套闭包风格
$supplier->load([ 'supplierProducts' => function ($query) use ($supplierProductParam, $productParam) { // 筛选 SupplierProduct 表的字段 $query->where('field', $supplierProductParam) // 嵌套闭包筛选关联的 Product 模型 ->with(['product' => function ($productQuery) use ($productParam) { $productQuery->where('product_field', $productParam); }]); } ]);
写法二:分层数组风格
$supplier->load([ // 筛选 SupplierProduct 表 'supplierProducts' => function ($query) use ($supplierProductParam) { $query->where('field', $supplierProductParam); }, // 直接对关联的 Product 模型加筛选 'supplierProducts.product' => function ($query) use ($productParam) { $query->where('product_field', $productParam); } ]);
核心说明
- 两种写法逻辑完全一致,只是代码组织形式不同;
- 外层闭包/数组项负责处理
SupplierProduct的筛选条件,内层闭包/嵌套数组项负责处理关联Product的筛选; - 若需要多字段筛选,直接在对应闭包里追加
->where()语句即可。
内容的提问来源于stack exchange,提问作者Herokiller
相关产品推荐
相关产品推荐

