如何在Laravel中编写这个复杂的查询?

时间:2018-02-25 12:23:26

标签: php sql laravel

我有一个完美的查询,但我需要在ORM Laravel。 我只需要在雄辩的查询构建器中使用此查询。

SELECT * FROM product where vendor_id in (
  SELECT vendor_id from vendor where is_block = 0
);
  

场景:有两个表。一个用于Product,另一个用于Vendor。   我想从Product表中选择产品。每个产品都属于供应商。如果供应商被阻止,则不要选择产品。   如果is_block属性为0,则表示vendor不是阻止。如果is_blocked=1则阻止供应商。我只需要选择is_block = 0的供应商的产品。

1 个答案:

答案 0 :(得分:3)

使用whereDoesntHave()方法:

Product::whereHas('vendor', function($q) {
    $q->where('is_block', 0);
})->get();

或{{3}}方法:

Product::whereDoesntHave('vendor', function($q) {
    $q->where('is_block', 1);
})->get();

确保您已在Product模型中定义了关系:

public function vendor()
{
    return $this->belongsTo(Vendor::class);
}