2014-12-07 69 views
1

保存表單數據試圖建立關於如何使用加入額外的數據表一個例子,我有以下設置:
CakePHP的3,對關聯表

  • studentsidname,[.. ]
  • coursesidtitle,[...]
  • 連接表courses_studentsidcourse_idstudent_idgradehours_attended

兩個基表的:

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] 

在學生記錄中創建學生表和關聯表中的記錄。

如何保存學生記錄時,應該如何形成發佈數據數組,以便能夠將gradehours_attended字段存儲在關聯表中?

回答

1

假設您在課程表單中,您應該將表單字段配置爲以下內容。

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

這會將您的相關請求數據合併到您的實體中,以便您可以保存它。