【问题标题】:How to create new records in multiple tables at the same time?如何同时在多个表中创建新记录?
【发布时间】:2010-07-17 08:09:34
【问题描述】:

我想知道如何实现允许用户在相关模型中输入多个(未知)记录数的视图..

例如,我有两个模型,分别称为组和用户。我想实现一个视图,允许我创建一个组(这很容易),并在同一个视图中让我创建多个属于该组的用户。

我希望我的问题很清楚,如果不是让我知道的话..

【问题讨论】:

    标签: model-view-controller cakephp cakephp-1.3


    【解决方案1】:

    在后端,使用 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 了解更多信息。

    【讨论】:

    • 感谢您的回复。我在 cakephp 的食谱中读到了那篇文章。前端呢..如何实现视图?
    • 这就够了。我可以从这里做剩下的事情。感谢您对 Jasie 的帮助。
    • 另外,考虑使用事务!
    • @sibidiba 谢谢你的建议,我会调查的。
    【解决方案2】:

    您可以使用 Cake 的表单助手更聪明地完成它。在上面的示例中,您可以这样重写:

    <?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');
    }
    ?>
    

    通过这种方式,您可以从自动错误处理以及字段值填充中受益。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2022-11-18
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多