У меня есть таблица с именем students
и таблица с именем scores
.
Первичный ключ таблицы students
- id
. Таблица scores
имеет внешний ключ от student_id
до students.id
Таблица scores
также имеет много полей, два из которых - score
и year
, указывающие значение балла и год, в котором студент получил этот балл.
За год студент набрал много баллов. Я хочу получить их средний балл и ранжировать средний балл студентов в конкретном c году.
Модель «Студент» имеет отношение:
class Student extends Model
{
public function scores()
{
return $this->hasMany('App\Score');
}
}
Я пробовал : В модели ученика
class Student extends Model
{
public function average_score()
{
return $this->scores()
->selectRaw('avg(score) as score, student_id')
->groupBy('student_id');
}
}
В StudentCtrl,
// Select only the student’s scores in a specific year
$yearQuery = function($query) use ($request) {
return $query->where('year', '=', $request->year);
};
$list = Student::select('id', 'name')
->with(['average_score' => $yearQuery])
->orderBy('average_score') // <-- If I delete this it works
->paginate(15);
Ошибка: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'average_score' в 'предложении порядка'