我有3个主表(sellers
,stores
,products
),还有另一个表用于存储与产品之间的关系(store_product
)
卖方有许多商店(一对多关系)
一个商店具有许多产品,但是这些产品中的任何一个都可以分配给多个商店 >,也许在另一个卖家的商店中(多对多关系)
现在,我很困惑,我想为特定卖家提供所有产品。
答案 0 :(得分:2)
您需要的是构建器功能whereHas('relation', $callback)
。使用它,您的查询非常简单:
$products = Product::query()
->whereHas('stores.seller', function ($query) use ($sellerId) {
$query->where('sellers.id', $sellerId);
})
->get();
显然,使用sellers.id
(其中sellers
是表名)很重要,因为您很可能在所有三个表上都有一个名为id
的列。如果省略表名,查询将失败。
答案 1 :(得分:2)
如果定义了关系保留,则可以执行以下操作:
// your seller's id
$seller_id = 1;
// get your products
$products = Product::whereHas('stores.seller', function ($query) use ($seller_id) {
$query->where('id', $seller_id);
})->get();
要获取每个卖方的产品数量,可以使用withCount()
方法,如下所示:
$sellers = Seller::withCount(['stores' => function ($query){
$query->withCount('products');
})->get();
这将在结果模型的{relation}_count
关系内放置一个stores
列。在这种情况下,products_count
:
foreach ($sellers as $seller) {
echo $seller->stores->first()->products_count;
}