在构建laravel web应用程序时,我遇到了有趣的问题,我相信应该有一个最好的做法来解决这类问题,而无需重新发明轮子。
基本上,我有很多对多的关系:
Post有很多类别,但同时类别也有很多帖子。 属于帖子的每个类别都可以有“投票”。这些投票通常不属于该类别,而只属于category_post数据透视表条目。
我的问题是: 我应该创建一个单独的模型“CategoryPost”然后使用一对多的关系与“投票”表有一个更优雅的方式来实现它。
我也在努力使查询过程尽可能具有表现力。
答案 0 :(得分:0)
基本上我在类别类中编写了这样的代码:
public function votes()
{
// find id of pivot table column
$categoryPost = CategoryPost::where('skill_id', $this->id)->first();
if($categoryPost) {
$likes = Like::where('likeable_id', $categoryPost->id)->get();
if(count($likes)) {
return count($likes);
} else {
return 0;
}
} else {
return 0;
}
}
同时我添加了ClassPost类。现在可能是最优雅的解决方案,但如果有更好的建议,那就太棒了。
答案 1 :(得分:0)
关于Eloquent Relationships L 5.2的Laravel文档:
计算关系结果
如果您想计算没有关系的结果数 实际加载它们你可以使用withCount方法,这将 在结果模型上放置{relation} _count列。
例如:
$posts = App\Post::withCount('comments')->get();
foreach ($posts as $post) {
echo $post->comments_count;
}
您可以添加检索多个关系的“计数”以及向查询添加约束:
$posts = Post::withCount(['votes', 'comments' => function ($query) {
$query->where('content', 'like', 'foo%');
}])->get();
echo $posts[0]->votes_count;
echo $posts[0]->comments_count;