选择多对多的关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择多对多的关系相关的知识,希望对你有一定的参考价值。
我有一张products
桌子和一张orders
桌子。他们之间有很多很多关系,而product_order
表是中间人。现在,我有两个产品ID,并且想要选择包含它们的订单(如果存在)。我怎么能用Laravel雄辩的话呢?
class Product extends Model
{
// ...
public function orders()
{
return $this->belongsToMany('AppOrder', 'product_order');
}
}
class Order extends Model
{
// ...
public function products()
{
return $this->belongsToMany('AppProducts', 'product_order');
}
}
答案
使用多个whereHas()
约束:
$productIds = [1, 2];
$query = Order::query();
foreach($productIds as $productId) {
$query->whereHas('products', function($query) use($productId) {
$query->where('products.id', $productId);
});
}
$orders = $query->get();
如果order_id
和product_id
的每个组合只能有一个数据透视表行,则可以使用较短的查询:
$productIds = [1, 2];
$orders = Order::whereHas('products', function($query) use($productIds) {
$query->whereIn('products.id', $productIds);
}, '=', count($productIds))->get();
以上是关于选择多对多的关系的主要内容,如果未能解决你的问题,请参考以下文章