2016-08-15 81 views
2

我想有這種查詢雄辯:如何結合WHERE子句中雄辯

SELECT * FROM table WHERE status = 1 AND (type = 2 OR type = 3 OR type = 4) 

我一直沒能找到雄辯這樣做的一個簡單的方法。如果我使用

Table::where('status', 1)->orWhere('type', 2)->orWhere('type', 3)... 

這這相當於:

SELECT * FROM table WHERE status = 1 OR type = 2 OR type = 3 OR type = 4 

這不是我所需要的。爲'status = 1'創建一個查詢範圍也會得到相同的結果。我如何在Eloquent中運行這個查詢?

回答

3

爲了羣裏這樣的條款,你需要一個封閉傳遞給where()方法,並添加里面的分組情況關閉。所以,你的代碼看起來是這樣的:

Table::where('status', 1)->where(function ($q) { 
    return $q->where('type', 2)->orWhere('type', 3)->orWhere('type', 4); 
}); 

這將生成SQL:

SELECT * FROM tables WHERE status = 1 AND (type = 2 OR type = 3 OR type = 4) 
1

,你可以嘗試在whereparameter grouping達到你想要的東西。

Table::where('status', 1)->where(function ($query) { 
      $query->where('type', 2) 
        ->orWhere('type', 3) 
        ->orWhere('type',4);}) 

欲瞭解更多信息,請查閱laravel Query builder文件。

-1

試試這個:

Table::where(function($query){ 
     $query->where('status', 1) 
      ->orWhere('type', 2) 
      ->orWhere('type', 3); 
}); 
1

雄辯允許nested parameter groupings傳遞閉包作爲的where的說法,orWhere,或無證,但更多的表現whereNested

Table::where('status', 1) 
    ->whereNested(function ($query) { 
     $query->where('type', 2) 
       ->orWhere('type', 3) 
       ->orWhere('type', 4); 
    });