class Tutorial extends Model
{
function chapters()
{
return $this->hasMany('App\Chapter');
}
function videos()
{
return $this->hasManyThrough('App\Video', 'App\Chapter');
}
}
И тогда вы можете сделать:
Tutorial::withCount(['chapters', 'videos'])
Подсчет связанных моделей
Если вы хотите подсчитать количество результатов отношения без фактической их загрузки, вы можете использовать метод withCount, который поместит столбец {отношение} _count в получающиеся модели. Например:
$posts = App\Post::withCount('comments')->get();
foreach ($posts as $post) {
echo $post->comments_count;
}
Вы можете добавить «счетчики» для нескольких отношений, а также добавить ограничения к запросам:
$posts = App\Post::withCount(['votes', 'comments' => function ($query) {
$query->where('content', 'like', 'foo%');
}])->get();
echo $posts[0]->votes_count;
echo $posts[0]->comments_count;
Вы также можете присвоить псевдоним результат подсчета отношений, что позволяет использовать несколько подсчетов для одного отношения:
$posts = App\Post::withCount([
'comments',
'comments as pending_comments_count' => function ($query) {
$query->where('approved', false);
}
])->get();
echo $posts[0]->comments_count;
echo $posts[0]->pending_comments_count;
Если вы комбинируете withCount с оператором select, убедитесь, что вы вызываете withCount после метода select:
$posts = App\Post::select(['title', 'body'])->withCount('comments');
echo $posts[0]->title;
echo $posts[0]->body;
echo $posts[0]->comments_count;