Cakephp 3,在关联表上保存表单数据

Cakephp 3,在关联表上保存表单数据,cakephp,jointable,cakephp-3.0,Cakephp,Jointable,Cakephp 3.0,试图建立一个关于如何使用带有额外数据的联接表的示例,我有以下设置: 表学生:id,姓名,[…] 表课程:id,标题,[…] 加入表课程学生:id,课程id,学生id,成绩,上课时间 两个基表的: class StudentsTable extends Table { public function initialize(array $config) { $this->belongsToMany('Courses', [ 'alias' => 'Cour

试图建立一个关于如何使用带有额外数据的联接表的示例,我有以下设置:

  • 学生
    id
    姓名
    ,[…]
  • 课程
    id
    标题
    ,[…]
  • 加入表
    课程学生
    id
    课程id
    学生id
    成绩
    上课时间
两个基表的:

class StudentsTable extends Table {
  public function initialize(array $config) {
    $this->belongsToMany('Courses', [
        'alias' => 'Courses',
        'foreignKey' => 'student_id',
        'targetForeignKey' => 'course_id',
        'joinTable' => 'courses_students',
        'through' => 'CoursesStudents',     
    ]);
}

class CoursesTable extends Table {
  public function initialize(array $config) {
    $this->belongsToMany('Students', [
        'alias' => 'Students',
        'foreignKey' => 'course_id',
        'targetForeignKey' => 'student_id',
        'joinTable' => 'courses_students',
        'through' => 'CoursesStudents',
    ]);
}
和关联表:

class CoursesStudentsTable extends Table {
  public function initialize(array $config) {
    $this->belongsTo('Courses', [
        'alias' => 'Courses',
        'foreignKey' => 'course_id'
    ]);
    $this->belongsTo('Students', [
        'alias' => 'Students',
        'foreignKey' => 'student_id'
    ]);
}
表中有一些课程,我尝试添加和编辑学生记录。背景

[courses] => [_ids]
在中,学生记录在学生表和关联表中创建记录


保存学生记录时,应该如何形成post数据数组,以便能够在关联表中存储
成绩
小时数
字段?

假设您在课程表单中,您应该按照以下方式配置表单字段

echo $this->Form->create($courses);
echo $this->Form->input("Courses.id");
echo $this->Form->input("Courses.title");
echo $this->Form->input("Courses.courses_students.$i.grade");
echo $this->Form->input("Courses.courses_students.$i.hours_attended");
基本思想是表单应该完全遵循在控制器中检索数据时的格式

这将为您正确格式化数据

然后在控制器中,需要传递关联以修补实体

$courses = $this->Courses->patchEntity($this->request->data(), ['associations' => ['CoursesStudents']]);
这将在实体中合并关联的请求数据,以便保存它