2013-03-08 82 views
9

我想添加一個「AND」子句的查詢生成器結束Laravel查詢生成器,代碼如下:與和查詢

$orderers = DB::table('address')->where(function($query) use ($term) { 
          $query->where('id', 'LIKE', '%' . $term . '%') 
            ->or_where('name', 'LIKE', '%' . $term . '%') 
            ->or_where('status', 'LIKE', '%' . $term . '%') 
            ->and_clause_goes_here('is_orderer', '=', '1'); 
         })->paginate($per_page); 

但在Laravel搜索和條款我不能找不到任何等價物。你能幫我解決這個問題嗎?

回答

19

JCS解決方案仍可能產生一些意想不到的結果,由於操作的順序。你應該像在SQL中一樣將所有OR組合在一起,明確定義邏輯。它還使得下一次(或另一個團隊成員)在閱讀代碼時更容易理解。

SELECT * FROM foo WHERE a = 'a' 
AND (
    WHERE b = 'b' 
    OR WHERE c = 'c' 
) 
AND WHERE d = 'd' 


Foo::where('a', '=', 'a') 
    ->where(function ($query) 
    { 
     $query->where('b', '=', 'b') 
      ->or_where('c', '=', 'c'); 
    }) 
    ->where('d', '=', 'd') 
    ->get(); 
+0

老兄,正是我在找的 – Chris 2014-01-27 09:24:58

+0

非常感謝。我認爲它必須是'orWhere'而不是'or_where'。它在laravel 5.5中導致了一個錯誤。 – 2017-11-18 08:20:45

10

只是另一種where子句會做,並且將使用

$orderers = DB::table('address')->where(function($query) use ($term) { 
          $query->where('id', 'LIKE', '%' . $term . '%') 
            ->where('is_orderer', '=', '1'); 
            ->or_where('name', 'LIKE', '%' . $term . '%') 
            ->or_where('status', 'LIKE', '%' . $term . '%') 
         })->paginate($per_page);