cakePHP2.3全部保存

时间:2013-03-02 05:34:10

标签: php cakephp cakephp-2.0 cakephp-appmodel

我正在使用Cakephp2.3

我有以下表格

表1:用户
这里我有字段group_id和其他字段 表2: 组 表3:学生

其中我有字段user_id

表4:监护人

我已经提交了user_id

还有student_guardians

我有字段guardian_id,student_id和relationship_id。

在其他表中我们有其他字段firstname,lastname等..

我用蛋糕烘焙来创建关联和

我想从学生/添加页面输入所有数据。像监护人一样(学生可以在单一表格上输入多个格式图片并提交他的详细信息)

我创建了一个视图,如下所示

<div class="guardianStudents form">
<?php echo $this->Form->create('GuardianStudent'); ?>
    <fieldset>
        <legend><?php echo __('Add Guardian Student'); ?></legend>
    <?php
        echo $this->Form->input('Student.first_name');
        echo $this->Form->input('Guardian.0.Guardian.first_name');
        echo $this->Form->input('Guardian.0.Guardian.last_name');
        echo $this->Form->input('Guardian.0.User.username');
        echo $this->Form->input('Guardian.0.User.password');
        echo $this->Form->input('Guardian.0.User.group_id',array('type'=>'text','value'=>'1'));

        echo $this->Form->input('Guardian.1.Guardian.last_name');
        echo $this->Form->input('Guardian.1.Guardian.last_name');
        echo $this->Form->input('Guardian.1.User.username');
        echo $this->Form->input('Guardian.1.User.password');
        echo $this->Form->input('Guardian.1.User.group_id',array('type'=>'text','value'=>'1'));


        echo $this->Form->input('Student.User.group_id',array('type'=>'text','value'=>'1'));
        echo $this->Form->input('Student.User.username');
        echo $this->Form->input('Student.User.password');   
       ?>
    </fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
<div class="actions">
    <h3><?php echo __('Actions'); ?></h3>
    <ul>

        <li><?php echo $this->Html->link(__('List Guardian Students'), array('action' => 'index')); ?></li>
        <li><?php echo $this->Html->link(__('List Guardian Relationships'), array('controller' => 'guardian_relationships', 'action' => 'index')); ?> </li>
        <li><?php echo $this->Html->link(__('New Guardian Relationship'), array('controller' => 'guardian_relationships', 'action' => 'add')); ?> </li>
        <li><?php echo $this->Html->link(__('List Students'), array('controller' => 'students', 'action' => 'index')); ?> </li>
        <li><?php echo $this->Html->link(__('New Students'), array('controller' => 'students', 'action' => 'add')); ?> </li>
        <li><?php echo $this->Html->link(__('List Guardians'), array('controller' => 'guardians', 'action' => 'index')); ?> </li>
        <li><?php echo $this->Html->link(__('New Guardian'), array('controller' => 'guardians', 'action' => 'add')); ?> </li>
    </ul>
</div> 

并且在控制器功能中添加

public function add() {
        if ($this->request->is('post')) {
            $this->GuardianStudent->create();
            $this->loadModel('User');

            if ($this->GuardianStudent->saveAll($this->request->data['Guardian'])) {    
                $this->Session->setFlash(__('The guardian student has been saved'));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The guardian student could not be saved. Please, try again.'));
            }
        }

}

并且它不保存任何数据

以上代码已在student_guradians控制器中编写..

有没有人知道如何实现这一目标 var转储数据

array(2) { ["Student"]=> array(2) { ["first_name"]=> string(5) "jkjkj" ["User"]=> array(3) { ["group_id"]=> string(1) "1" ["username"]=> string(10) "klklfkfkkl" ["password"]=> string(6) "lklklk" } } ["Guardian"]=> array(2) { [0]=> array(2) { ["Guardian"]=> array(2) { ["first_name"]=> string(5) "jkjkj" ["last_name"]=> string(8) "kjkjkjkj" } ["User"]=> array(4) { ["username"]=> string(7) "kjkjkjk" ["password"]=> string(7) "kjkjjkk" ["group_id"]=> string(1) "1" ["name"]=> string(1) "1" } } [1]=> array(2) { ["Guardian"]=> array(1) { ["last_name"]=> string(6) "jkkjkj" } ["User"]=> array(4) { ["username"]=> string(10) "jkljjljjkl" ["password"]=> string(6) "kjkjkj" ["group_id"]=> string(1) "1" ["name"]=> string(1) "1" } } } }

谢谢

1 个答案:

答案 0 :(得分:0)

注意

我意识到这是不是的答案,但是太多的信息要把它放在'评论'中

IMO你的设计/逻辑有缺陷。您已经设计了数据库,以便学生可以拥有多个监护人,而监护人可以成为多个学生的监护人(HABTM)。这似乎是正确的,听起来合乎逻辑。

然而,您设计了表单,以便在添加添加的同时输入 的详细信息(如果一切正常)将导致新的Guardian始终插入数据库,即使这些Guardians已经存在于数据库中。因此,基本上你已经在学生和它的监护人之间创建了一个'hasMany'关系,虽然'存储'为'HABTM'。

通过在表单中​​输入Guardians的详细信息,将插入一个 new Guardian,可能包含与现有Guardian相同的详细信息(name,last_name),但具有不同的{{1导致重复记录

我认为这会给你留下一些选择;

  1. 添加新学生时,请提供包含现有Guardians的复选框(或多选)列表以供选择。根据数据库中存在的Guardian数量,您可能需要创建一些“自定义”表单元素,以便更容易选择正确的Guardian,否则此列表可能会变得很长
  2. 如果您只存储监护人的名字和姓氏,并且监护人不必由多名学生共享(即更改监护人的名字将使所有学生的名字更改为'那个卫士),通过将关系转换为hasMany / belongsTo关系,你可能会更好;例如“卫报”仅附属于一名学生。
  3. 在所有情况下,问问自己,只有Guardian的名字/姓氏足以唯一地识别正确的Guardian。毕竟,守护者可能会分享相同的名字,而且你不想最终改变多个学生的卫报的细节,事实上,他们不是同一个人,只有同一个名字?