【发布时间】:2016-05-28 13:15:38
【问题描述】:
我有 2 个模型; Post 和 Rating
Rating 模型包含一个 amount 列,用于指定某事物的评分有多高。这是基于 5 星评级,因此金额可以是 1-5 之间的值
Post 模型与评级模型和称为 Ratings 的函数具有一对多关系,该函数返回 hasMany。
我想根据平均评分获得 5 个最新帖子。对于平均评分,我创建了一个如下所示的函数
注意:复数(Ratings)返回hasMany关系,而单数(Rating)返回一个值,即平均评级
public function Rating(){
return floor($this->Ratings()->avg('rating'));
}
是否可以使用 Eloquent QueryBuilder 检索按平均评分排序的帖子?
目前我正在检索所有帖子,然后在集合对象上使用 sortBy 方法以获得平均评分最高的帖子。我这样做的方式如下所示。
$posts = Post::all();
$posts = $posts->sortByDesc(function ($post, $key) {
return $post->Rating();
});
现在,如果我只想显示 5,我仍然需要检索和排序所有看起来对资源不太友好的东西(在我看来。我没有任何证据或说这是真的)。
所以我的问题如下:使用 Eloquent 而不是对 FULL 集合进行排序是否可行。
子问题:使用 Eloquent 执行此操作而不是对集合进行排序会对效率产生影响吗?
【问题讨论】:
标签: laravel laravel-5 eloquent laravel-5.2