$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}%") будет делать выборку уже из очищенной коллекции не сканируя лишние тексты.
А почему он должен отбросить?
К тому же ты говоришь так, будто у тебя запрос УЖЕ выполнен на этапе where, что не соответствует реальности
в такой цепочке ВСЁ считается запросом а не последовательность запросов?
Вместо ->get() попробуй залогировать ->toSql(). Увидишь конечный запрос, который будет выполнен
у тебя нет последовательности запросов. У тебя только последовательно выборки для конструктора запроса. В твоей выборке все портит OR который выбивается из общей логики. Сделай запрос как написал выше, тогда выйдет: WHERE deleted_at is null and hidden = false and no_search = false and (content like "%term%" or content like "%term%")
Владимир уже расписал запрос, я понял. Хорошо, что не оставил "работающий" запрос а полез разбираться.
+ а посмотреть ->toSql() оказалось полезным, я узнал, что выборка ещё и с сортировкой order by `nest_left` asc
ес-на, если nested tree подключен))
а ещё и deleted_at is null и без меня там участвует.
Обсуждают сегодня