Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中创建的按数据透视表排序_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

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

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

  • 课程(id、名称、创建时间、更新时间)
  • 学生(id、姓名、创建时间、更新时间)
  • 课程学生(id、课程id、学生id、创建时间、更新时间)
  • 我正在尝试检索学生已注册的所有课程,其顺序按数据透视表course_student中创建的_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'));
    }
    

    你知道我怎样才能做到这一点吗?

    从学生那里获得课程:

    $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子句