我有一个包含'Schools'表和'Students'表的数据库。显然,一所学校有很多学生,这在数据库中有所体现。
在CakePHP中'烘焙'后,我的添加功能都可以使用默认表单。我可以创造学生,我可以创建学校。但是,每当我创建一所学校时,我希望能够创建两名学生。 所以我在学校的'add.ctp'文件中设置了这样的表格:
<?= $this->Form->create('school') ?>
<fieldset>
<legend><?= __('Add School') ?></legend>
<?php
// create the school
echo $this->Form->input('school_name');
echo $this->Form->input('school_description');
echo $this->Form->input('student.0.name');
echo $this->Form->input('student.0.description');
echo $this->Form->input('student.1.name');
echo $this->Form->input('student.1.description');
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
然而,我找不到的解决方案是能够在SchoolsController.php文件中修改学校的“添加”功能,以便能够保存这两个学生。我该怎么做?
编辑:以下是POST数据:
Array
(
[school_name] => Harvard
[school_description] => A University
[students] => Array
(
[0] => Array
(
[name] => Bob Brown
[description] => Likes frogs
)
[1] => Array
(
[name] => James Jones
[description] => Plays trumpet
)
[2] => Array
(
[name] => Sarah Simmer
[description] => Enjoys movies
)
)
)
答案 0 :(得分:1)
您提供的帖子数据似乎是正确的,因此您可以像这样修改保存功能:
$school = $this->Schools->newEntity($this->request->data, ["associated" => ["Students"]]);
$this->Schools->save($school);
进一步阅读:https://book.cakephp.org/3.0/en/orm/saving-data.html#saving-hasmany-associations
答案 1 :(得分:0)
在你的添加功能中:
if $this->request->is('post') {
$students = $this->Students->newEntities($this->request->data()['students']);
foreach ($students as $student) {
$this->Students->save($student);
}
}
来源:https://book.cakephp.org/3.0/en/orm/saving-data.html#converting-multiple-records