Eloquent Count 嵌套关系与嵌套预加载
Posted
技术标签:
【中文标题】Eloquent Count 嵌套关系与嵌套预加载【英文标题】:Eloquent Count nested relationships with nested eager loading 【发布时间】:2017-11-19 20:08:33 【问题描述】:你一定看过以下功能(在facebook上),一个帖子有一些cmets,每个评论都有一个like counter。
https://img4.hostingpics.net/pics/67853820170616003640LaravelNewsAccueil.png
在 laravel 中它会像
发表有很多评论 评论属于帖子 CommentLike 属于用户 CommentLike 属于评论 评论有很多评论喜欢所以,现在我想用他们的 cmets 获得 10 个帖子,每个评论都有点赞计数器。
Post::with('comments')->withCount('comments.likes')->take(10)->get();
这根本不起作用。
Post::with('comments')->withCount('comments')->take(10)->get();
这会计算每个帖子的所有 cmets,我想计算每个帖子的每条评论的所有点赞数。
【问题讨论】:
【参考方案1】:试试这个
Post::with(['comments' => function($query)
$query->withCount('likes');
])->take(10)->get();
【讨论】:
有没有办法获得喜欢的总数而不是每条评论的计数?能够通过$post->likes_count
或类似方式获得的东西【参考方案2】:
关于这个问题的其他答案是正确的,但似乎有错字。他们都忘记了'cmets'之前的起始“[”,所以正确的代码sn-p如下:
Post::with(['comments' => function($query)
$query->withCount('likes');
])->take(10)->get();
【讨论】:
【参考方案3】:这会起作用。
Post::with('comments' => function($query)
$query->withCount('likes');
])->take(10)->get();
您可以通过$post->comments->likes_count;
访问点赞数
【讨论】:
【参考方案4】:我假设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();
【讨论】:
很好,我会试试这个!但是没有“雄辩”的方式来做到这一点吗?没有原始查询? 我不知道 sum(...) 函数。以上是关于Eloquent Count 嵌套关系与嵌套预加载的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 混合获取 Eloquent 急切加载嵌套多个模型