Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

The model structure is as follows

Tutorial -> (hasMany) Chapters -> (hasMany) videos

How can we load number of videos (video_count) from Tutorial Model with laravel 5.3's withCount() method

I have tried:

Tutorial::withCount('chapters')
->withCount('chapters.videos') // this gives error: Call to undefined method IlluminateDatabaseQueryBuilder::chapters.videos()
->all();

Edit

This works, Any Better solution?

Tutorial::withCount('chapters')
->with(['chapters' => function($query){
    $query->withCount('videos');
}])
->all();
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
588 views
Welcome To Ask or Share your Answers For Others

1 Answer

You can only do a withCount() on a defined relation of the model.

However, a relationship can be hasManyThrough which would achieve what you are after.

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

    function videos()
    {
        return $this->hasManyThrough('AppVideo', 'AppChapter');
    }
}

And then you can do:

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

Docs:


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...