У меня есть две таблицы (фильмы и обзоры).Один фильм имеет множество обзоров и один отзыв принадлежит одному фильму
Отношения: 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 = максимальная оценка.
На простом английском мне нужно:
- присоединиться к двум столам
- получить все фильмы, которыеесть отзывы
- сгруппировать по film_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' в 'предложении заказа' ...
Мой вопрос: есть идеи, как решить эту проблему?(Я бы предпочел использовать Eloquent Orm)