Разъясните как работает запрос where в ларе. Есть запрос:

$items = Page
::whereNull('deleted_at')
->where('hidden', false)
->where('no_search', false)
->where('content', 'like', "%${query}%")
->get();

добавляю в него

->orWhere('content', 'like', "%${query}%")



$items = Page
::whereNull('deleted_at')
->where('hidden', false)
->where('no_search', false)
->where('content', 'like', "%${query}%")
->orWhere('content', 'like', "%${query}%")
->get();

и получаю игнор where('hidden', false), т.е. получаю в выборку записи с 'hidden' = true

Если я поставлю ->where('hidden', false) в конец запроса, то всё работает как надо. Вопрос: "->" не равносильно "&&" и к "orWhere" надо относиться прямо как к "||" в конструкции "IF"?

Я думал, что ->where('hidden', false) отбросит НЕ соответствующи записиси и ->orWhere('content', 'like', "%${query}%") будет делать выборку уже из очищенной коллекции не сканируя лишние тексты.

9 ответов

16 просмотров

А почему он должен отбросить?

К тому же ты говоришь так, будто у тебя запрос УЖЕ выполнен на этапе where, что не соответствует реальности

Point-111 Автор вопроса

в такой цепочке ВСЁ считается запросом а не последовательность запросов?

Point 111
в такой цепочке ВСЁ считается запросом а не послед...

Вместо ->get() попробуй залогировать ->toSql(). Увидишь конечный запрос, который будет выполнен

Point 111
в такой цепочке ВСЁ считается запросом а не послед...

у тебя нет последовательности запросов. У тебя только последовательно выборки для конструктора запроса. В твоей выборке все портит OR который выбивается из общей логики. Сделай запрос как написал выше, тогда выйдет: WHERE deleted_at is null and hidden = false and no_search = false and (content like "%term%" or content like "%term%")

Point-111 Автор вопроса
Дмитрий Иванченко
Вместо ->get() попробуй залогировать ->toSql(). Ув...

Владимир уже расписал запрос, я понял. Хорошо, что не оставил "работающий" запрос а полез разбираться.

Point-111 Автор вопроса
Дмитрий Иванченко
Вместо ->get() попробуй залогировать ->toSql(). Ув...

+ а посмотреть ->toSql() оказалось полезным, я узнал, что выборка ещё и с сортировкой order by `nest_left` asc

Point-111 Автор вопроса
Vladimir 
ес-на, если nested tree подключен))

а ещё и deleted_at is null и без меня там участвует.

Похожие вопросы

Обсуждают сегодня

вопрос: кто как решает вопрос с динамической подгрузкой скриптов для отдельных страниц с включенным turbo router?
Sergei Toroptsev
25
Друзья, за кем?
Magic
12
Всем привет. Кто-то может подсказать, как можно перевести значения Selection поля, если список значений в нем формируется динамически? Я изначально их получаю из selection дру...
Наталья Селезнева
6
ого, спасибо Никит, ты как всегда кладезь нужной инфы! Сейчас пойду копаться, а мне релиз создать как и версию самого плагина? типа 1.0.8?
Alex Blaze
6
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
Чет мне ссыкотно опять Rainlab.User в проект ставить. Кто знает, опять наотъебись все сделали или после обнов пользоваться можно?
Black Cat
10
коллеги привет. уже второй день бьемся об заклад с одной ошибкой, может вы сталкивались с таки странным поведением? есть тестовый сервер, на который паблишим релизную версию W...
Magzhan
11
это группа токсиков или тех кто помогает?
Ибрагим
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Карта сайта