Красноречивый запрос Laravel 5.7 с несколькими адресами и whereNotIn - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь выполнить запрос, который получает набор данных на основе идентификатора пользователя, соответствующего двум возможным столбцам, и значения workflow_state, не соответствующего двум значениям.Моя попытка здесь:

$usersBugs = Bug::where('assigned_user_id', $user->id)
                ->orWhere('reported_by', $user->id)
                ->whereNotIn('workflow_state', ['closed', 'rejected'])
                ->get();

Возвращается «ошибка» с отклоненным workflow_state.Я предполагаю, что он выполняет whereNotIn как или?Как бы я реорганизовал это, чтобы выполнить, что ошибка не может находиться ни в одном из этих двух состояний (несмотря ни на что), и она может соответствовать либо assigned_user_id ИЛИ report_by.Я попытался привести с помощью whereNotIn:

$usersBugs = Bug::whereNotIn('workflow_state', ['closed', 'rejected'])
                ->where('assigned_user_id', $user->id)
                ->orWhere('reported_by', $user->id)
                ->get();

В любом случае он возвращает совпавшую ошибку, основанную на assigned_user_id, несмотря на то, что workflow_state отклонено.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы должны завернуть where .. orWhere в дополнительное закрытие:

$usersBugs = Bug::where(function($q) {
  $q->where('assigned_user_id', $user->id)
                    ->orWhere('reported_by', $user->id)
})->whereNotIn('workflow_state', ['closed', 'rejected'])->get();
0 голосов
/ 09 октября 2018

Вы можете попробовать это:

$model->whereNotIn(...)->where(function($query) use ($user) {
   $query->where('assigned_user_id', $user->id)->orWhere('reported_by', $user->id);
})->get();
...