CakePHP:从不同的控制器将多个条目保存到模型中

时间:2017-05-25 07:16:00

标签: php cakephp web cakephp-3.0

我有一个包含'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
                )
        )
)

2 个答案:

答案 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