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

发布于 2024-09-10 10:23:08 字数 146 浏览 6 评论 0原文

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

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

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

I was wondering how can I implement a view that allows the user to enter multiple(unknown) number of records in related models..

for example, I have two models called groups and users. And I want to implement a view that allows me to create a group ( which is easy ) and in the same view let me create multiple number of users who belong to this group.

I hope that my question is clear, if not just let me know ..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我爱人 2024-09-17 10:23:08

在后端,使用 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 元素。

有关详细信息,请参阅

In the backend, use a saveAll($data), preparing your data like:

// 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)

In the view, you want to prepare your form such that it has correctly array'd keys:

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

If you want to dynamically add users to the form, consider using javascript to inject new input elements.

See this for more info.

浮生未歇 2024-09-17 10:23:08

您可以使用 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');
}
?>

这样您就可以受益于自动错误处理以及字段值填充。

You can do it smarter with using Cake's Form helper. In the example above you can rewrite like this:

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

This way you can benefit from auto error handling as well as field values population.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文