Заказ по сводной таблице created_at в Laravel

В моей базе данных есть следующие таблицы:

  1. курсы (идентификатор, имя, created_at, updated_at)
  2. студенты (идентификатор, имя, created_at, updated_at)
  3. course_student (id, course_id, student_id, created_at, updated_at)

Я пытаюсь получить все курсы, на которые студент записался, в порядке уменьшения с помощью значения 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 для получения данных.

Gabriel 09.11.2018 10:31

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

Max Powell 09.11.2018 10:47

Это неправда, у вас должна быть третья модель, если вы хотите использовать отношения «многие ко многим» через другую таблицу.

Gabriel 09.11.2018 11:13

попробуйте этот $courses = Course::whereHas('students')->orderBy('course_student.create‌​d_at','desc')->get()‌​;

akaincore 09.11.2018 11:34

Я получил это исключение: SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'course_student.created_at' в 'предложении порядка

Max Powell 09.11.2018 11:47

@Gabriel Согласно Документ Laravel, вам не нужна третья модель со многими ко многим.

Dessauges Antoine 09.11.2018 15:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
6
1 909
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Получите курсы от студента:

$student = Student::where('user_id', auth()->id())->first();
$courses = $student->courses()->orderByDesc('course_student.created_at')->get();

Другие вопросы по теме