Laravel 5.1: получить только записи связанной модели

#php #laravel #eloquent

#php #laravel #красноречивый

Вопрос:

У меня есть три модели:

  • Категория
  • Публикация
  • Комментарий

Это их реализации:

 class Category extends Eloquent {
    public function posts() {
        return $this->hasMany('Post');
    }
}


class Post extends Eloquent {
    public function category() {
        return $this->belongsTo('Category');
    }
    public function comments() {
        return $this->hasMany('Comment');
    }
}

class Comment extends Eloquent {
    public function post() {
        return $this->belongsTo('Post');
    }
}
  

Возможно ли с помощью eloquent получить список (массив или коллекцию) всех комментариев (и только комментариев, без сообщений), относящихся к категории?
(это означает, что для данной категории найдите все связанные сообщения, а затем верните все связанные комментарии).

Заранее спасибо!

Ответ №1:

Просто используйте hasManyThrough отношение к вашей категории модели :

 class Category extends Eloquent {
    public function posts() {
        return $this->hasMany(Post::class);
    }
    public function comments() {
        return $this->hasManyThrough(Comment:class,Post::class);
    }
}
  

После этого вы можете просто вызвать $category->comments , чтобы получить коллекцию со всеми комментариями, относящимися к категории.

См. https://laravel.com/docs/5.1/eloquent-relationships#has-many-through для получения дополнительной информации.

Для Laravel 5.3: https://laravel.com/docs/5.3/eloquent-relationships#has-many-through

Комментарии:

1. Спасибо! Я делал это совершенно по-другому, но hasManyThrough делает именно то, что мне нужно. Большое вам спасибо