2016-10-28 6 views
1

を使用して、ネストされたOR条件を作成しますか?私はEloquentのwhereOrメソッドを使ってみましたが、生成されたSQLでは何もしないようです。しかし、たとえそれがあったとしても、私の現在のコードが、私が探しているもののように埋め込まれているかどうかはわかりません。は、私のようなものを作りたいLaravel雄弁

私が持っているもののいくつか:

$docSearch = DB::table('documents'); 

    if ($chapter > 0) { 
     $docSearch->where('chapter', $chapter); 
    } 

    $existingManagementArray = Management::getAllManagementIDsAsArray(); 
    if ($management_id > 0 && in_array($management_id, $existingManagementArray)) { 
     $docSearch->where('management_id', $management_id); 
    } else { 
     $docSearch->whereIn('management_id', $existingManagementArray); 
    } 

    if (strlen($term) > 0) { 
     //HELP! These don't seem to change the SQL 
     $docSearch->whereOr('title', 'like', "%$term%"); 
     $docSearch->whereOr('desc', 'like', "%$term%"); 
    } 

    DB::enableQueryLog(); 
    $allFoundDocs = $docSearch->get(); 
    dd(DB::getQueryLog()); 

答えて

0

これはあなたのために働く必要があります。where()方法にClosureを渡す

DB::table('documents')->where('chapter', 3) 
    ->where('section', 4) 
    ->where(function($q) use($abc) { 
     $q->where('title', 'like', '%'.$abc.'%') 
      ->orWhere('desc', 'like', '%'.$abc.'%'); 
    })->get(); 

は、制約group.Theを開始するために、クエリビルダを指示Closureは、かっこグループに含める必要がある制約を設定するために使用できるクエリビルダインスタンスを受け取ります。

Docs(セクションはパラメータグループと呼ばれます)

+0

何が起こっているのか少し説明できますか?私はEloquentのドキュメントで関数の受け渡しを見たことがありません。 – zundi

+0

@ zundi、まあ、 'where()'メソッドにクロージャ(関数)を渡し、高度な制約を 'where()'親に追加することができます。ネストされた 'where()'の複数のレベルを行うことができます。いくつかのデータをクロージャに渡したい場合は、 'use()'を使うのを忘れないでください。 –

+1

新しい何かを学んだ、ありがとうAlexey – zundi