如何在 Laravel 5 中使用 orderBy Desc 获得平均值

Tru*_*ode 4 php mysql laravel eloquent laravel-5

我的数据库中有 2 个表。

booksratings

books idname

ratings

id, book_id,rating

我已经为这些模型设置了很多关系。

所以在Book模型中 -

public function ratings()
{
    return $this->hasMany('App\Rating');
}
Run Code Online (Sandbox Code Playgroud)

Rating模型中 -

public function book()
{
    return $this->belongsTo('App\Book');
}
Run Code Online (Sandbox Code Playgroud)

现在我想获取所有具有平均评分但按高评分排序的书籍。

所以我先给书评分高,然后评分低。

那么我如何加入 2 个表来实现这个结果。

谢谢。

Jon*_*eir 13

您可以使用修改后的withCount()

$books = Book::withCount(['ratings as average_rating' => function($query) {
    $query->select(DB::raw('coalesce(avg(rating),0)'));
}])->orderByDesc('average_rating')->get();
Run Code Online (Sandbox Code Playgroud)


小智 6

Books::withAvg('ratings', 'rating')->orderBy('ratings_avg_rating', 'desc')->take(5)->get();
Run Code Online (Sandbox Code Playgroud)

这适用于 Laravel 8