15

クエリビルダーの最後に「AND」句を追加したいのですが、コードは次のようになります。

$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でAND句を検索しても、同等のものは見つかりませんでした。この問題を手伝ってくれませんか。

4

2 に答える 2

30

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();
于 2013-03-08T19:10:46.633 に答える
16

単に別のwhere句が実行され、ANDが使用されます

$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);
于 2013-03-08T03:18:43.307 に答える