2013-03-08 9 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 I couldnのAND句を検索同等のものは見つかりません。この問題を手伝ってもらえますか?

答えて

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

+0

ありがとうございました。私はそれが 'or_where'でなくてはならないと思う。 laravel 5.5でエラーが発生しました。 –

10

単に句が行います、まだによる操作のために、いくつかの予期しない結果をもたらす可能性が

$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); 
関連する問題