Задать вопрос
@halenharper

Как подружить в Laravel 5 where()->orWhere и whereIn()?

Делаю выборку из базы. Из таблицы выбираю посты пользователя - публичные и личные. Потом хочу из этих постов выбрать посты только по определенным категориям.
$posts = Posts::where('status', 1)->orWhere(function($user_post){
                                    $user_post->where('status', 3)
                                                  ->where('public', 0);
                                    });
//какой-то код где получаем id категорий
$cats_id = [3, 7, 12 ,15];
$posts = $posts->whereIn('cat_id', $cats_id)->get();

Не срабатывает. Все равно получаю все посты, без фильтра категорий.
Но, если убрать orWhere из запроса, то whereIn() во втором запросе срабатывает.
id категорий могу получить только после некоторых манипуляций. Сразу их в выборку не получиться взять
Как подружить where()->orWhere и whereIn()?
  • Вопрос задан
  • 4979 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
ellrion
@ellrion
смотрите, у вас сейчас билдер делает так `Условие_1 ИЛИ Условие_2 И Условие 3`
Вы же хотите что бы было `(Условие_1 ИЛИ Условие_2) И Условие 3`
"Скобки" в ларавелевском билдере добавляются используя анонимку.
$posts = Posts::where(function ($q) {
    $q->where('status', 1)
        ->orWhere(function($user_post){
            $user_post->where('status', 3)->where('public', 0);
        });
})
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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