提问人:Herokiller 提问时间:5/31/2023 更新时间:5/31/2023 访问量:59
Load 方法中关系的 Laravel 查询关系
Laravel query relation of relation in load method
问:
我有 2 个模型:它们通过带有附加字段的表格连接Supplier
Product
SupplierProduct
对于给定的,我需要加载它(带有附加的产品)按两者和模型中的条件过滤$supplier
SupplierProducts
where
SupplierProduct
Product
加载所有内容将如下所示:
$supplier->load([
'supplierProducts.product'
]);
现在我怎样才能加载两者的条件?SupplierProduct
Product
$supplier->load([
'supplierProducts' => function ($query) use ($supplierProductParam, $productParam) {
$query->where('field', $supplierProductParam);
// can I query supplierProducts.product here?
}, // or can I query supplierProducts.product here?
]);
答:
0赞
user7309871
5/31/2023
#1
将它们定义为彼此之间的多对多关系,在定义中使用 withPivot 的 belongsToMany。该关系具有 wherePivot 方法来调节透视模型。
return $this->belongsToMany(Role::class)->withPivot('active', 'created_by')
您也可以在关系上使用 where。https://laravel.com/docs/10.x/eloquent-relationships#filtering-queries-via-intermediate-table-columns
Suplier::query()->with('products', function (Relation $relation): void {$relation->wherePivot(....);});
0赞
jmvcollaborator
5/31/2023
#2
如果要在多对多关系中添加其他筛选器,可以使用:
wherePivot('id', 1)
或
wherePivotIn('id', [1])
更多官方信息在这里
就您而言:
$supplier->load([
'supplierProducts' => function ($query) use ($supplierProductParam, $productParam) {
$query->where('field',$supplierProductParam)->wherePivotIn('fieldonmanytomany',$supplierProductParam);
},
]);
评论
products
supplier_products
BelongsToMany
wherePivot