我有4个型号:
我可以用他们的ID获取所有的学生和导师。我想让管理员创建课程并将它们存储在数据透视表中:
然而,这种关系对我来说并不太清楚。我认为我需要
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'
];
}
我可能会让管理员选择多位导师和学生。
我怎么能做到这一点?
非常感谢。
正如我所看到的,你的共同模式是课程如此第一:
在课程模型中添加以下内容:
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,你可以用它来实现这个目的。