Php 在Laravel中创建的按数据透视表排序
在我的数据库中,我有以下表格:Php 在Laravel中创建的按数据透视表排序,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,在我的数据库中,我有以下表格: 课程(id、名称、创建时间、更新时间) 学生(id、姓名、创建时间、更新时间) 课程学生(id、课程id、学生id、创建时间、更新时间) 我正在尝试检索学生已注册的所有课程,其顺序按数据透视表course_student中创建的_at值递减 这就是我定义模型的方式: 学生模型: public function students () { return $this->belongsToMany(Student::class, 'course_st
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'));
}
你知道我怎样才能做到这一点吗?从学生那里获得课程:
$student = Student::where('user_id', auth()->id())->first();
$courses = $student->courses()->orderByDesc('course_student.created_at')->get();
该课程与学生之间没有任何关系映射键,这就是它不起作用的原因。你必须使用课程学生模型来获取数据。我没有课程学生模型,因为你不应该在多对多关系中添加第三个模型。。。我更改了模型并添加了透视表和键,但仍然不起作用。这不是真的,如果要通过另一个表使用多对多关系,应该使用第三个模型。请尝试以下操作:
$courses=Course::whereHas('students')->orderBy('Course\u student.created\u at','desc')->get()代码>我得到了这个异常:SQLSTATE[42S22]:未找到列:1054未知列'course\u student.created\u at'in'order子句