Laravel ORM с фильтром

Вот мои таблицы в БД:

сообщения: id, группа, создатель, тело, скрыть

like_user_post_relationships: идентификатор, пользователь, сообщение

Модель: LikeUserPostRelationship:

пользователь принадлежитTo (Пользователь :: класс, 'пользователь')

сообщение принадлежитTo (Сообщение :: класс, 'сообщение')

Как мне запросить все LikeUserPostRelationship::Where('user','=',$user->id)->with('post')->get(); И отфильтровать коллекцию LikeUserPostRelationship с помощью $ post-> hide = true?

ценю любую помощь!

Как будто пользовательские сообщения выглядят так, как будто они должны быть отношениями «многие ко многим», у них не должно быть модели, а ownToMany следует использовать в User и Post.

Devon 16.07.2018 14:30

да, я все еще учусь, буду исследовать отношения "многие ко многим"

NewProgrammer 16.07.2018 14:34

как должны быть отношения "многие ко многим" для подобного сообщения?

NewProgrammer 16.07.2018 14:50

Прочтите laravel.com/docs. У них это довольно хорошо задокументировано.

Devon 16.07.2018 14:57

Я пробовал отношение hasMany из модели User к LikeUserPostRelationship, я могу это сделать: $ query = User :: find (Auth :: id ()) -> first (); вернуть $ query-> like_post; но я не могу вернуть $ query-> like_post-> post; Ошибка: нет коллекции с названием [post]. Я уже определил почтовые отношения в модели LikeUserPostRelationship.

NewProgrammer 17.07.2018 11:57

я могу решить проблему с помощью Auth :: user () -> like_post () -> whereDoesntHave ('post', function ($ query) {$ query-> where ('hide', '=', true)} ) -> с ('pos‌ t') -> get ();

NewProgrammer 17.07.2018 18:34

У вас по-прежнему не должно быть модели для отношений. Как я уже сказал выше, это отношения "многие ко многим", посмотрите документацию о том, как с ними бороться. Могут ли пользователи действительно лайкать только один пост? Я сомневаюсь в этом, поэтому использовать $ user-> like_post как единый элемент неправильно.

Devon 17.07.2018 18:40

Спасибо, Девон, отношения «Многие ко многим» спасают жизнь! Проблема, с которой я столкнулся как новый разработчик laravel, заключается в том, что требуется несколько типов посредников отношений, и это довольно сбивает с толку: post_user_like table, post_user_share. Так что настраиваемые теги здесь очень полезны!

NewProgrammer 18.07.2018 02:46

Да, это всего лишь один тип отношений, многие-ко-многим. Отношения «многие ко многим» - единственные, которым нужна промежуточная таблица. Если бы это был один-ко-многим или один-к-одному, вы бы просто сохранили идентификатор в одной из существующих таблиц.

Devon 18.07.2018 03:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать whereDoesntHave() для своих критериев, которые будут отфильтровывать результаты, в которых связанный пост установлен как hide = true.

$results = LikeUserPostRelationship::with('post')
                        ->where('user','=',$user->id)
                        ->whereDoesntHave('post', function ($query) {
                            $query->where('hide', '=', true);
                        })
                        ->get();

См. Запрос отсутствия связи

Другие вопросы по теме