Конструктор запросов 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, я не смог найти ни одного эквивалента. Не могли бы вы помочь мне с этой проблемой?

Author: giannis christofakis, 2013-03-08

2 answers

Решение JCS все еще может дать некоторые неожиданные результаты из-за порядка операций. Вы должны сгруппировать все операции вместе, как в SQL, явно определяя логику. Это также облегчает понимание в следующий раз, когда вы (или другой член команды) будете читать код.

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();
 20
Author: Collin James, 2016-12-07 20:09:23

Просто другое предложение 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);
 12
Author: jcs, 2013-03-08 03:18:43