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

Как в Laravel получить все посты, которые лайкнул пользователь?

Здравствуйте.

У меня есть модели: User, Post, Videos.
Я хочу сделать возможность ставить лайки постам и видео, а затем получать список постов/видео, которые "лайкнул" конкретный юзер.

Вот структура, на которой я пока остановился.
posts
    id - integer
    title - string

videos
    id - integer
    title - string

likes
    id - integer
    user_id - integer
    likeable_id - integer
    likeable_type - string


Создал модель Like, определил отношения таким образом.
class User extends Model
{
   public function posts()
    {
        return $this->hasMany(Post::class);
    }

    public function videos()
    {
        return $this->hasMany(Video::class);
    }
}

class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
   
    public function likes()
    {
        return $this->morphMany(Like::class, 'likeable');
    }
}

class Video extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
   
    public function likes()
    {
        return $this->morphMany(Like::class, 'likeable');
    }
}

class Like extends Model
{
    public function likeable()
    {
        return $this->morphTo();
    }
}


Как получить все посты/видео, которым пользователь поставил "лайк"?
Правильна ли такая структура и отношения?
  • Вопрос задан
  • 1011 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Omniverse Автор вопроса
Попробовал так - заработало:
return Post::whereHas('likes', function ($query) {
            $query->where('user_id', Auth::id())
                  ->where('likeable_type', 'App\Post');
        })->get();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Antonchik
@Antonchik
Программирую на HTML
Правильней будет создать отдельные таблицы для лайков постов, и лайков видео. Потом сделать в классе юзера две функции которые возвращают hasMany лайков видео, или поста, и через лайк уже получать пост или видео
Ответ написан
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
ну так наверно надо сделать user -> hasMany -> likes
и потом уже фильтровать по likeable_type при получении лайков юзера.
Ответ написан
Ваш ответ на вопрос

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

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