在Laravel中将列添加到数据透视表

时间:2017-08-30 13:33:07

标签: php html mysql database laravel

我有4个型号:

  1. 学生
  2. 导师
  3. 管理
  4. 我可以用他们的ID获取所有学生和导师。 我希望管理员创建课程并将其存储在数据透视表中:

    • course_student
    • course_tutor

    然而,这种关系对我来说并不太清楚。我认为我需要

      

    belongsToMany

    课程学生之间的

    。同样适用于导师课程我是对的吗?

    还不清楚的是,如何在HTML端选择多个值并将其提交给服务器。

    E.g:

    public function rules()
    {
        return [
            'name'          =>  'required|unique:courses|max:60',
            'tutor_id'      =>  [
                'required',
                                Rule::exists('tutors', 'id');
            ],
            'student_id'      =>  [
                'required',
                Rule::exists('students', 'id');
            ],
            'spoken_language'    =>  'required',
            'description'   =>  'required|max:255'
        ];
    }
    

    这是AdminCreateNewCourseRequest

    match_aspect

    我可能会让管理员选择多位导师和学生。

    我该如何做到这一点?

    非常感谢。

1 个答案:

答案 0 :(得分:0)

如我所见,您的常见模型是Course如此可贵:

在课程模型中添加以下内容:

public function students()
    {
       return $this->belongsToMany(Student::class);
    }

public function tutors()
    {
       return $this->belongsToMany(Tutor::class);
    }

然后,您需要为两个班级(Student和Tutor)创建数据透视表:

将此添加到您的迁移文件中(分别用于学生和导师):

Schema::create('course_students', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('course_id')->unsigned()->index();
    $table->foreign('course_id')->references('id')->on('courses')->onDelete('cascade');
    $table->integer('student_id')->unsigned()->index();
    $table->foreign('student_id')->references('id')->on('students')->onDelete('cascade');
});

Schema::create('course_tutors', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('course_id')->unsigned()->index();
    $table->foreign('course_id')->references('id')->on('courses')->onDelete('cascade');
    $table->integer('tutor_id')->unsigned()->index();
    $table->foreign('tutor_id')->references('id')->on('tutors')->onDelete('cascade');
});

请查看我正在使用的字段名称,并确保使用相同的字段。

要获得课程的学生和导师,您可以通过

$course = App\Course::find($id);
$students = $course->students;
$tutors = $course->tutors;

希望获得帮助!

通过这种方式,Eloquent Relationships Cheat Sheet非常有用,可以用来实现这一目标。