Laravel показывать модель, только если соблюдены условные отношения «многие ко многим»? - PullRequest
0 голосов
/ 02 мая 2020

Итак, у меня есть модель «Категория» и модель «Пост» с отношением многие ко многим.

По сути, я где-то выводю Категории и хочу иметь псевдо-вывод этого типа;

  • Если для каких-либо сообщений, принадлежащих категории, атрибут «скрытый» установлен в значение «истина», то не возвращать эту категорию. (Таким образом, даже если в этой категории 100 сообщений, даже если у одного из них «скрыто» как истинное значение, не возвращайте категорию.

Вот то, что я пробовал до сих пор, но это Казалось бы, он скрывает категорию, только если ВСЕ сообщения помечены как скрытые. Если даже у одного из них есть «скрытое» ложное, оно показывает, даже если остальные 99 верны. Что совершенно противоположно тому, что я хочу, чтобы произошло.

Category::latest()->whereHas('posts', function ($query) { 
    return $query->where('hidden', false);
})->get();

Надеюсь, кто-нибудь может помочь.

1 Ответ

0 голосов
/ 02 мая 2020

Вы должны изменить свое состояние. Ваш текущий запрос - «все категории, у которых есть сообщение, которое не скрыто». Вы хотите "все категории, в которых нет скрытого сообщения".

Category::latest()->whereDoesntHave('posts', function ($query) {
    return $query->where('hidden', true);
})->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...