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

问题描述 投票:0回答:1

我有4个型号:

  1. 学生
  2. 导师
  3. 课程
  4. 管理员

我可以用他们的ID获取所有的学生和导师。我想让管理员创建课程并将它们存储在数据透视表中:

  • course_student
  • course_tutor

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

belongsToMany

课程与学生之间。对于Tutor和Course来说,我是对的吗?

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

E.g:

public function store(AdminCreateNewCourseRequest $request)
{
    $this->authorize('create-course');

    $course = new Course;

    $course->name               = $request->name;
    $course->tutor_id           = $request->tutor_id;
    $course->student_id         = $request->student_id;
    $course->spoken_language    = $request->spoken_language;
    $course->description        = $request->description;

    $course->save();

    What to do?

    return redirect($course->path())
        ->with('flash', 'The course has been published');
}

这是AdminCreateNewCourseRequest

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

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

我怎么能做到这一点?

非常感谢。

php html mysql database laravel
1个回答
0
投票

正如我所看到的,你的共同模式是课程如此第一:

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

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

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

然后,您需要为两个类(学生和教师)创建数据透视表:

将其添加到您的迁移文件中(分别针对学生和导师):

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;

希望这有帮助!

顺便说一句,这是一个非常有用的qazxsw opi,你可以用它来实现这个目的。

© www.soinside.com 2019 - 2024. All rights reserved.