我正在研究Laravel 5.8
假设我们有一个这样的餐桌产品:
id | product_type_id | ...
1 | ______ 1 _______ | ...
2 | ______ 2 _______ | ...
3 | ______ 2 _______ | ...
4 | ______ 3 _______ | ...
我想知道如何获取所有与产品类型“共享”的产品。
换句话说,我想获取除product_type_id在表中唯一的那些产品之外的所有产品。
我知道谁在foreach循环中执行此操作,但是我想利用使用Laravel的资源。
谢谢。
答案 0 :(得分:0)
Laravel的实现方式是将雄辩的关系与has()
和whereHas()
一起使用,就像这样:
$products = Product::whereHas('type', function ($builder) {
$builder->whereKey(Type::has('products', '>=', 2)->pluck('id'));
})->get();
我假设您已经定义了Product
和Type
模型并将它们连接在一起:
Product
属于Type
Type
hasMany Product
答案 1 :(得分:0)
如果我正确理解了您的问题,则可以执行以下操作。
首先,请确保您的ProductType
模型已定义产品关系。
(我假设它基于您的“产品”表。)
然后,您可以使用雄辩的模型方法has
根据关系计数进行查询。
示例:
ProductType::with('products')->has('products', '>', 1)->get();
with('products')
是可选的。它只是简单地同时抓取产品,以避免其他查询。 whereHas
方法也可以使用,但实际上仅在需要基于更复杂的参数过滤关系时才需要。
您还可以在has
模型内部使用whereHas
/ Product
方法,使用反(即belongsTo)关系来获得相同的东西,但取反。这实际上取决于您希望如何将数据呈现给您。
示例:
Product::whereIn(
'product_type_id',
ProductType::has('products', '>', 1)->pluck('id')
)->get();
首先总结一下,将为您提供:
ProductType => Product
第二个示例将给您:
Product => ProductType
有关更多信息,请参见相关的Laravel documentation。
希望有帮助!