Как я могу выполнить, где запросы правильно в laravel eloquent построителя запросов - PullRequest
3 голосов
/ 22 сентября 2019

Посмотрите на следующий запрос:

    $testQuery = Customer::where('company_id', auth()->user()->company_id);

    $testQuery
        ->where('name', 'like', '%test%')
        ->orWhere('age', '>', 22);

    dd($testQuery->toSql());

, который производит следующий запрос SQL:

select * from customers где (company_id =? Иname like? Or age>?) И customers. deleted_at is null

То, что я ищу, выглядит примерно так:

select* с customers где company_id =?и (name как? или age>?) и customers. deleted_at равно нулю

Как этого добиться?т.е. первое, где условие company_id = ? важнее, чем остальные фильтры на name и age?

Прямо сейчас, основываясь на том, как построитель запросов строит запрос, я вижу результаты с другим company_id, чем тот, который я указал в своем запросе.

1 Ответ

4 голосов
/ 22 сентября 2019

Я полагаю, что вы хотите использовать группирование параметров .

Используя замыкания, вы можете указать конструктору запросов, что должно быть заключено в круглые скобки:

$testQuery = Customer::where('company_id', auth()->user()->company_id)
                     ->where(
                         function ($query) {
                           $query->where('name', 'like', '%test%')
                                 ->orWhere('age', '>', 22);
                      })->get();
...