代码之家  ›  专栏  ›  技术社区  ›  Ahmed Aman

如何同时在多个表中创建新记录?

  •  0
  • Ahmed Aman  · 技术社区  · 14 年前

    我希望我的问题是清楚的,如果不只是让我知道。。

    2 回复  |  直到 14 年前
        1
  •  1
  •   rxmnnxfpvg    14 年前

    在后端,使用saveAll($data),准备数据,如:

    // Prepare the data for the Group hasMany User
    $data = array('Group' => array(
                    'id' => 5, 
                    'name' => 'my group',
                    'User' => array(
                      array('id'=>1,'username' => 'john'),
                      array('id'=>2,'username' => 'pachelbel'))
                    )
                  )
    
    // OR if it's being passed in, just use $this->data in place of $data
    
    // Save all the data
    $this->Group->saveAll($data)
    

    在视图中,您需要准备窗体,使其具有正确的数组键:

    <form id="GroupCreateForm" method="post" action="/groups/create">
      <input type="hidden" name="data[Group][id]" value="5" />
      <input type="hidden" name="data[Group][name]" value="my group" />
        <input type="hidden" name="data[Group][User][0][id]" value="1" />
        <input type="hidden" name="data[Group][User][0][username]" value="john" />
        <input type="hidden" name="data[Group][User][1][id]" value="2" />
        <input type="hidden" name="data[Group][User][1][username]" value="pachelbel" />
    </form>
    

    如果您想动态地将用户添加到表单中,可以考虑使用javascript注入新用户 input

    看到了吗 this 更多信息。

        2
  •  1
  •   Nik Chankov    14 年前

    使用Cake的Form helper可以做得更聪明。在上面的例子中,你可以这样重写:

    <?php
    echo $this->Form->Create('Group');
    echo $this->Form->input('Group.id');
    echo $this->Form->input('Group.name');
    for($i=0;$i<10;$i++){
       $this->Form->input('User.'.$i.'.id');
       $this->Form->input('User.'.$i.'.name');
    }
    ?>
    

    这样,您可以从自动错误处理以及字段值填充中获益。