【发布时间】:2018-09-19 06:29:36
【问题描述】:
我有两张桌子(电影和评论)。一部电影有很多评论,一篇评论属于一部电影
关系: 电影.php
public function reviews()
{
return $this->hasMany('App\Review');
}
和 Review.php
public function film()
{
return $this->belongsTo('App\Film');
}
由于我使用 Laravel Eloquent 关系,我想使用 Eloquent 建立一个按评论排序的电影列表。评论从 0 = 未评分到 5 = 最高评分。
我需要简单的英语:
- 加入两个表
- 获取所有有评论的电影
- 按电影 ID 分组
- 计算平均值(一部电影可能有很多评论,所以我需要平均值)
- 整理结果列表
- 获取列表
我使用 Query Builder 的解决方案出错:
$best_films = DB::table('films')
->join('reviews', 'reviews.film_id', '=', 'films.id')
->select('films.id', 'avg(reviews.rating)')
->groupBy('films.id')
->orderByRaw('avg(reviews.rating) DESC')
->get();
这样我得到以下错误: 找不到列:1054 未知列 'avg(reviews.rating)' ...
使用 Eloquent ORM 我不能按其他表中的列排序。这样的事情不起作用:
$films = Film::whereHas('reviews')->orderBy('reviews.film_id', 'desc')->get();
我得到错误: 未找到列:1054 未知列 'reviews.film_id' in 'order Clause'...
我的问题: 知道如何解决这个问题吗? (我更喜欢使用 Eloquent Orm)
【问题讨论】:
-
我认为你需要在 Eloquent 上使用
->with('reviews')Film::whereHas('reviews')->with('reviews')->orderBy('reviews.film_id', 'desc')->get(); -
使用“->with('reviews')”得到同样的错误:找不到列:1054 未知列'reviews.film_id'。因为 WHERE 列在 Joined 表中
标签: php laravel eloquent laravel-query-builder