Не удается извлечь столбец с помощью красноречивого

#mysql #laravel #eloquent

Вопрос:

У меня есть запрос, который извлекает оценки учащихся, но я хочу также извлечь имя и фамилию учащегося, но я получаю ошибку

Кодом sqlstate[42000]: синтаксическая ошибка или нарушение прав доступа: 1055 ‘shunifu_db.пользователи.имя не в группе (SQL: выберите name , знаки.student_id,круглая(средняя(от Марка)) а Марк с grades внутренним соединением grades_students на grades_students . grade_id = grades . id внутреннее соединение users на grades_students . student_id = users . id внутреннее соединение marks на marks . student_id = grades_students . student_id где grades . stream_id = 5, а assessement_id = 1 группу по marks . student_id )

вот мой код

 $result = DB::table('grades')
    ->join('grades_students', 'grades_students.grade_id', '=', 'grades.id')
    ->join('users','grades_students.student_id','=','users.id')
    ->join('marks','marks.student_id','=','grades_students.student_id')
    ->where('grades.stream_id', $request->stream_name)
    ->where('assessement_id',$request->assessement)
    ->select(DB::raw('marks.student_id,ROUND(AVG(mark)) as mark'))
    ->groupBy('marks.student_id')
    ->get()
 

Комментарии:

1. добавьте более подробную информацию, а также заполните свой код

2. @Shahrukh Я только что обновил код

3. в какой таблице вы сохраняете имя студента?

4. @Shahrukh, В таблице Пользователей

5. если вы используете group by , вам необходимо выбрать определенные столбцы, в которых вы выбираете все столбцы. Используйте select в запросе для выбора определенных столбцов.

Ответ №1:

Может быть, это сработает

 $result = DB::table('grades')
    ->join('grades_students', 'grades_students.grade_id', '=', 'grades.id')
    ->join('users','grades_students.student_id','=','users.id')
    ->join('marks','marks.student_id','=','grades_students.student_id')
    ->where('grades.stream_id', $request->stream_name)
    ->where('assessement_id',$request->assessement)
    ->select(DB::raw('users.id,users.name,ROUND(AVG(mark)) as mark'))
    ->groupBy(['users.id', 'users.name'])
    ->get()
 

Здесь я использую таблицу пользователей для группировки, а также для извлечения имени.

Комментарии:

1. к какой модели относится assessment_id? у вас есть модели отношений? (пользователь->оценки->>отметки и отметки->>>оценка и оценка->>>>пользователь и т.д.)