Как бы я преобразовал этот запрос с несколькими ors в красноречивый формат? - PullRequest
0 голосов
/ 31 марта 2019

Мне нужно выполнить этот запрос, который правильно работает в MYSQL

SELECT * FROM table WHERE title_id = 4 AND (state_a = 'TRUE' OR state_b = 'TRUE' OR state_c = 'TRUE')

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

    $values = \App\Time_Code::select('id','title_id','type','state_a','state_b','state_c')
                        ->where('title_id', '=', '4')
                        ->where('state_a', '=', 'TRUE')
                        ->orWhere('state_b', '=', 'TRUE')
                        ->orWhere('state_c', '=', 'TRUE')
                        ->orderBy('updated_at', 'desc')
                        ->get();

Я совершенно не в том направлении?В этом случае он включает строки с title_ids, которые не равны 4. Также он возвращает всю строку, а не только запрошенные поля.

1 Ответ

1 голос
/ 31 марта 2019

Вам необходимо написать вложенный запрос, чтобы отразить ваше вложение условий в MySQL:

$values = \App\Time_Code::select('id','title_id','type','state_a','state_b','state_c')
                    ->where('title_id', '=', '4')
                    ->where(function ($q) {
                         $q->where('state_a', '=', 'TRUE')
                           ->orWhere('state_b', '=', 'TRUE')
                           ->orWhere('state_c', '=', 'TRUE');
                           })
                    ->orderBy('updated_at', 'desc')
                    ->get();

См. Руководство по Группировка параметров .

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