Вот мои таблицы в БД:
сообщения: id, группа, создатель, тело, скрыть
like_user_post_relationships: идентификатор, пользователь, сообщение
Модель: LikeUserPostRelationship:
пользователь принадлежитTo (Пользователь :: класс, 'пользователь')
сообщение принадлежитTo (Сообщение :: класс, 'сообщение')
Как мне запросить все LikeUserPostRelationship::Where('user','=',$user->id)->with('post')->get();
И отфильтровать коллекцию LikeUserPostRelationship с помощью $ post-> hide = true?
ценю любую помощь!
да, я все еще учусь, буду исследовать отношения "многие ко многим"
как должны быть отношения "многие ко многим" для подобного сообщения?
Прочтите laravel.com/docs. У них это довольно хорошо задокументировано.
Я пробовал отношение hasMany из модели User к LikeUserPostRelationship, я могу это сделать: $ query = User :: find (Auth :: id ()) -> first (); вернуть $ query-> like_post; но я не могу вернуть $ query-> like_post-> post; Ошибка: нет коллекции с названием [post]. Я уже определил почтовые отношения в модели LikeUserPostRelationship.
я могу решить проблему с помощью Auth :: user () -> like_post () -> whereDoesntHave ('post', function ($ query) {$ query-> where ('hide', '=', true)} ) -> с ('pos t') -> get ();
У вас по-прежнему не должно быть модели для отношений. Как я уже сказал выше, это отношения "многие ко многим", посмотрите документацию о том, как с ними бороться. Могут ли пользователи действительно лайкать только один пост? Я сомневаюсь в этом, поэтому использовать $ user-> like_post как единый элемент неправильно.
Спасибо, Девон, отношения «Многие ко многим» спасают жизнь! Проблема, с которой я столкнулся как новый разработчик laravel, заключается в том, что требуется несколько типов посредников отношений, и это довольно сбивает с толку: post_user_like table, post_user_share. Так что настраиваемые теги здесь очень полезны!
Да, это всего лишь один тип отношений, многие-ко-многим. Отношения «многие ко многим» - единственные, которым нужна промежуточная таблица. Если бы это был один-ко-многим или один-к-одному, вы бы просто сохранили идентификатор в одной из существующих таблиц.






Вы можете использовать whereDoesntHave() для своих критериев, которые будут отфильтровывать результаты, в которых связанный пост установлен как hide = true.
$results = LikeUserPostRelationship::with('post')
->where('user','=',$user->id)
->whereDoesntHave('post', function ($query) {
$query->where('hide', '=', true);
})
->get();
См. Запрос отсутствия связи
Как будто пользовательские сообщения выглядят так, как будто они должны быть отношениями «многие ко многим», у них не должно быть модели, а ownToMany следует использовать в User и Post.