Eloquent Count嵌套关系与嵌套的预先加载

时间:2017-06-17 00:15:38

标签: sql laravel orm eloquent eager-loading

你一定看过以下功能(在facebook上),一篇带有一些评论的帖子,每个评论都有一个类似的计数器。

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

在laravel中它会像

  • 发表了很多评论
  • 评论belongsTo Post
  • CommentLike属于“用户”
  • 评论赞同于发表评论
  • 评论有很多评论赞。

所以现在,我希望收到10条评论的帖子,每个评论都有类似的计数器

发布::与( '评论') - > withCount( 'comments.likes') - >取(10) - >得到();

这根本不起作用......

发布::与( '评论') - > withCount( '评论') - >取(10) - >得到();

确实如此,但这会计算每篇帖子的所有评论,我想在每篇文章中按照评论计算所有评论。

4 个答案:

答案 0 :(得分:5)

试试这个

Post::with('comments' => function($query){
   $query->withCount('likes')
}])->take(10)->get();

答案 1 :(得分:1)

这将起作用。

Post::with('comments' => function($query){

   $query->withCount('likes');

}])->take(10)->get();

您可以按$post->comments->likes_count;

访问喜欢计数

答案 2 :(得分:1)

关于此问题的其他答案是正确的,但似乎其中有错字。他们都忘记了'comments'之前的“ [”开头,因此正确的代码段如下:

Post::with(['comments' => function($query){

   $query->withCount('likes');

}])->take(10)->get();

答案 3 :(得分:0)

我做出假设CommentLike代表comment_likes

Post::with('comments' => function($query){
    $query->select('comment_likes.*')
          ->join('comments', 'comments.id', '=', 'comment_likes.comment_id')
          ->groupBy('comments.id')    
          ->havingRaw('sum(comment_likes.id) as likes')
}])->take(10)->get();