首页 > 解决方案 > 在 Laravel 中按数据透视表 created_at 排序

问题描述

在我的数据库中,我有以下表格:

  1. 课程(id、名称、created_at、updated_at)
  2. 学生(id、姓名、created_at、updated_at)
  3. course_student(id、course_id、student_id、created_at、updated_at)

我正在尝试按数据透视表 course_student 中的 created_at 值递减检索学生注册的所有课程

这就是我定义模型的方式:

学生模型:

   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'));
}

知道我该怎么做吗?

标签: phpmysqllaraveleloquent

解决方案


从学生那里获取课程:

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

推荐阅读