#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 делает именно то, что мне нужно. Большое вам спасибо