Построение сложных запросов WHERE в Eloquent - PullRequest
1 голос
/ 31 мая 2019

У меня были проблемы с этим некоторое время, и я не могу понять это (даже я знаю, что это может быть просто). Я делаю первые шаги в Laravel и хочу создать такой запрос с помощью Eloquent.

// This should be condition one
WHERE status NOT IN (4,99)

OR

// condition two
status NOT IN (4,99) AND ('column1' LIKE %XXXX% OR 'column2' LIKE %XXXX%)

Я делаю это:

$q->whereNotIn('order_stage_id', [99, 4])
->orWhere(function ($query) {
    $query->whereNotIn('order_stage_id', [99, 4])
        ->orWhere('reference_number', 'like', '%'.$request->key.'%')
        ->orWhere('seller_remark', 'like', '%'.$request->key.'%')
        ->orWhere('companies.name', 'like', '%'.$request->key.'%')
        ->orWhere('users.name', 'like', '%'.$request->key.'%');
});

1 Ответ

1 голос
/ 31 мая 2019

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

WHERE order_stage_id NOT IN (4,99) OR ( WHERE order_stage_id NOT IN (4,99) OR reference_number LIKE %XXXX% OR ...)

Для получения оператора SQL AND необходимо использовать метод where(), а затем использовать замыкание для вложения методов orWhere().

$q->whereNotIn('order_stage_id',[99,4])
    ->orWhere(function($query) {

    $query->whereNotIn('order_stage_id',[99,4])
        ->where(function($query) {

        $query->where('column_1', 'like', '%XXX%')
            ->orWhere('column_2', 'like', '%XXX%')
            ->orWhere('column_2', 'like', '%XXX%');
    });
});

Не забывайте, что вам нужно будет передавать объект $request каждому закрытию, чтобы иметь к нему доступ:

->where(function($query) use ($request) {

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...