Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eloquent Count nested relationships with nested eager loading

You must have seen the following feature (on facebook), a post with some comments, each comment has a like counter.

https://img4.hostingpics.net/pics/67853820170616003640LaravelNewsAccueil.png

In laravel it would be something like

  • Post hasMany Comment
  • Comment belongsTo Post
  • CommentLike belongsTo User
  • CommentLike belongsTo Comment
  • Comment hasMany CommentLike

So, now I want to get 10 posts with their comments, with the like counter per comment.

Post::with('comments')->withCount('comments.likes')->take(10)->get();

This does not work at all.

Post::with('comments')->withCount('comments')->take(10)->get();

This counts all comments for each post, I want to count all likes per comment on each post.

like image 816
darkylmnx Avatar asked Jun 17 '17 00:06

darkylmnx


1 Answers

Try this

Post::with(['comments' => function($query){
   $query->withCount('likes');
}])->take(10)->get();
like image 162
A.khalifa Avatar answered Oct 28 '22 22:10

A.khalifa