选择多对多关系

Gab*_*urt 0 laravel eloquent

我有一张products桌子和一张orders桌子。它们之间有很多对很多的关系,而product_order表是中介。现在,我有两个产品ID,并且想要选择包含两个产品ID的订单(如果存在)。如何用Laravel雄辩地做到这一点?

class Product extends Model
{
    // ...

    public function orders()
    {
        return $this->belongsToMany('App\Order', 'product_order');
    }
}

class Order extends Model
{
    // ...

    public function products()
    {
        return $this->belongsToMany('App\Products', 'product_order');
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eir 5

使用多个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();
Run Code Online (Sandbox Code Playgroud)

如果order_id和的每种组合只能有一个枢轴行product_id,则可以使用较短的查询:

$productIds = [1, 2];
$orders = Order::whereHas('products', function($query) use($productIds) {
    $query->whereIn('products.id', $productIds);
}, '=', count($productIds))->get();
Run Code Online (Sandbox Code Playgroud)