20

Eloquentを使用して次のようなクエリを作成するにはどうすればよいですか?

SELECT * FROM a_table WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1 AND d = 5

where&or_where関数をチェーンすることで、AND/ORを思い通りに組み合わせることができませんでした。

4

4 に答える 4

50

where句をネストできます:http://laravel.com/docs/database/fluent#nested-where

Model::where(function($query)
{
    $query->where('a', 'like', 'keyword');
    $query->or_where('b', 'like', 'keyword');
})
->where('c', '=', '1');

これにより、次のようになります。SELECT * FROM models WHERE (a LIKE %keyword% OR b LIKE %keyword%) AND c = 1

于 2013-03-27T13:12:10.187 に答える
9

例に対するより正確な答えについては、次のようになります。

$val = '%keyword%';

A_Table_Model::where(function($query) use ($val)
{
    $query->where('a', 'like', $val);
    $query->or_where('b', 'like', $val);
})
->where('c', '=', 1)
->where('d', '=', 5)
->get();

注:これはLaravel 3の構文です。Laravel4にはキャメルケースまたはWhere()を使用してください

于 2014-02-11T16:56:00.160 に答える
3

Laravel 5.1+では、これも機能し、見た目もすっきりします。

Model::where(function($query) {
    $query->where('a', 'like', 'keyword');
    $query->or_where('b', 'like', 'keyword');
})->where('c', '=', '1')->get();
于 2015-12-21T19:45:42.827 に答える
-3

DB::raw()最初に使用しwhere()て、like/orステートメントを入力できます。

于 2013-03-27T12:01:04.153 に答える