В моей базе данных есть следующие таблицы:
Я пытаюсь получить все курсы, на которые студент записался, в порядке уменьшения с помощью значения created_at в сводной таблице course_student
Вот как я определил свои модели:
Студенческая модель:
public function students () {
return $this->belongsToMany(Student::class, 'course_student', 'course_id', 'student_id')->withTimestamps();
}
Модель курса:
public function courses () {
return $this->belongsToMany(Course::class, 'course_student', 'student_id', 'course_id')->withTimestamps();
}
И это то, что я пробовал в своем контроллере, но он не работает.
public function enrolled() {
$courses = Course::whereHas('students', function($query) {
$query->where('user_id', auth()->id())
->orderBy('course_student.created_at','desc');
})->get();
return view('courses.enrolled', compact('courses'));
}
любая идея, как я могу это сделать?
У меня нет модели course_student, потому что вы не должны добавлять третью модель во многие ко многим отношениям ... Я изменил свои модели и добавил сводную таблицу и ключи, но все еще не работает
Это неправда, у вас должна быть третья модель, если вы хотите использовать отношения «многие ко многим» через другую таблицу.
попробуйте этот $courses = Course::whereHas('students')->orderBy('course_student.created_at','desc')->get();
Я получил это исключение: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'course_student.created_at' в 'предложении порядка
@Gabriel Согласно Документ Laravel, вам не нужна третья модель со многими ко многим.






Получите курсы от студента:
$student = Student::where('user_id', auth()->id())->first();
$courses = $student->courses()->orderByDesc('course_student.created_at')->get();
Курс не имеет какого-либо ключа сопоставления отношений со студентами, поэтому он не работает. Вы должны использовать модель course_student для получения данных.