我有两个桌子(电影和评论)。一部电影有很多评论,而一部评论则属于一部电影
关系: Film.php
public function reviews()
{
return $this->hasMany('App\Review');
}
和Review.php
public function film()
{
return $this->belongsTo('App\Film');
}
由于我使用的是Laravel Eloquent关系,所以我想建立一个使用Eloquent进行评论的电影清单。评论从0 =未评分,到5 =最高评分。
我需要用简单的英语
我使用查询生成器的解决方案出现错误:
$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)'...
使用口才ORM 我无法按其他表中的列进行排序。这样的事情不起作用:
$films = Film::whereHas('reviews')->orderBy('reviews.film_id', 'desc')->get();
我得到了错误: 找不到列:1054'order子句'中的未知列'reviews.film_id'...
我的问题: 任何想法如何解决该问题? (我宁愿使用雄辩的Orm)
答案 0 :(得分:1)
您应该尝试这个
best_films = DB::table('films')
->join('reviews', 'reviews.film_id', '=', 'films.id')
->select('films.id', DB::raw('avg(reviews.rating)'))
->groupBy('films.id')
->orderByRaw('avg(reviews.rating) DESC')
->get();
答案 1 :(得分:0)
我认为您必须像这样在关系模型中缩短数据
public function reviews()
{
return $this->hasMany('App\Review')->orderBy('film_id', 'desc');
}