У меня есть следующие 3 отношения:
Пользователь:
public function posts () {
return $this->hasMany(Post::class)->orderBy('created_at', 'DESC');
}
public function ratings () {
return $this->hasMany(Rating::class)->orderBy('created_at', 'DESC');
}
Сообщение:
public function user () {
return $this->belongsTo(User::class);
}
public function ratings () {
return $this->hasMany(Rating::class)->orderBy('created_at', 'DESC');
}
Рейтинг:
public function user () {
return $this->belongsTo(User::class);
}
public function post () {
return $this->belongsTo(Post::class);
}
AПользователь может создавать сообщения, а другие пользователи могут оценивать сообщения в основном.
В моем контроллере я хочу иметь возможность сортировать сообщения по 3 фильтрам, дате создания, дате обновления и сообщениям с самым высоким рейтингом в среднемрейтинг .
Первые две опции фильтра я решил со следующим кодом:
return Post::with(['user'])->orderBy('created_at', 'DESC')->paginate(15)->onEachSide(1);
и
return Post::with(['user'])->orderBy('updated_at', 'DESC')->paginate(15)->onEachSide(1);
Однако я не знаю, каксортировать посты по средним рейтингам.Может ли кто-нибудь указать мне правильное направление?
Кроме того, можно ли запретить постам с одним рейтингом быть в верхней части списка, возможно, потребуется, чтобы сообщение имело как минимум X оценок, прежде чем оно будет подсчитано