Laravel 5.3 withCount() 嵌套关系

2022-08-30 12:56:24

模型结构如下

教程 -> (有)章节 -> (有) 多个视频

我们如何使用laravel 5.3的withCount()方法从教程模型中加载视频数量(video_count)

我试过:

Tutorial::withCount('chapters')
->withCount('chapters.videos') // this gives error: Call to undefined method Illuminate\Database\Query\Builder::chapters.videos()
->all();

编辑

这有效,有什么更好的解决方案吗?

Tutorial::withCount('chapters')
->with(['chapters' => function($query){
    $query->withCount('videos');
}])
->all();

答案 1

您只能对模型的已定义关系执行 a 操作。withCount()

但是,一段关系可以实现你所追求的目标。hasManyThrough

class Tutorial extends Model
{
    function chapters()
    {
        return $this->hasMany('App\Chapter');
    }

    function videos()
    {
        return $this->hasManyThrough('App\Video', 'App\Chapter');
    }
}

然后你可以做:

Tutorial::withCount(['chapters', 'videos'])

文档:


答案 2

推荐