Tru*_*ode 4 php mysql laravel eloquent laravel-5
我的数据库中有 2 个表。
books
和 ratings
在books
id
,name
在 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