如何将数据写入 CakePHP 中 HABTM 连接表的 HABTM 关联?

Posted

技术标签:

【中文标题】如何将数据写入 CakePHP 中 HABTM 连接表的 HABTM 关联?【英文标题】:How do I write data to a HABTM association of a HABTM join table in CakePHP? 【发布时间】:2009-06-07 14:45:11 【问题描述】:

我正在尝试使用以下结构保存数据:

如您所见,usersexperiences 表之间存在 HABTM 关联。 experiences_userstags 之间还有另一个 HABTM。我创建了以下表格:

<?php echo $form->create('Experience', array('action' => 'addClassic'));?>
    <?php
    echo $form->input('Experience.date', array('dateFormat' => 'DMY'));
    echo $form->input('Experience.time', array('timeFormat' => '24', 'empty' => array(-1 => '---'), 'default' => '-1'));
    echo $form->input('Experience.name');
    echo $form->input('ExperiencesUser.1.note');
    echo $form->input('ExperiencesUser.1.rating'); 
    //echo $form->input('Tags.Tags', array('multiple' => 'multiple', 'options' => $tags));
    //echo $form->input('ExperiencesUser.1.Tags', array('multiple' => 'multiple', 'options' => $tags));
    //echo $form->input('ExperiencesUser.1.Tags.Tags', array('multiple' => 'multiple', 'options' => $tags));
    echo $form->input('ExperiencesUser.1.confirmed', array('type' => 'hidden', 'value' => '1'));

    echo $form->input('ExperiencesUser.1.user_id', array('type' => 'hidden'));
    echo $form->input('ExperiencesUser.2.user_id', array('type' => 'hidden'));
    ?>
<?php echo $form->end(__('Add', true));?>

一切正常。 saveAll 方法创建新体验,将这种新体验分配给两个用户(通过 experiences_users)并设置相关内容。

困扰我的是我想将一些 标签 分配给新创建的 experiences_users 记录(到第一个)。我想,这应该通过一些评论的东西来完成。此注释代码的每一行都创建表单并将数据发送到 $this->data,但它永远不会被保存。

所以我的问题是:在我的示例中 $this->data$form->input 将数据保存到 experiences_users_tags 的正确语法是什么

【问题讨论】:

【参考方案1】:

我想通了。 Cake saveAll 函数仅适用于直接关联的模型。幸运的是,Cake 能够解决这个问题:

查看

echo $form->input('Tags.Tags', array('multiple' => 'multiple', 'options' => $tags));

控制器

$this->Experience->saveAll($data, $parameters);
$this->Experience->ExperiencesUser->save($data);

调用 saveAll() 后的蛋糕用最后插入的 id 填充 $this->data。所以第二次调用 save() 会将数据保存到正确的表中并正确设置外键。

【讨论】:

以上是关于如何将数据写入 CakePHP 中 HABTM 连接表的 HABTM 关联?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 2.9 将 CSV 字符串转换为 HABTM 数据

是否可以使用 Cakephp 中的 saveAll 一次将所有相关记录插入到 HABTM 中?

如何在 CakePHP 的下拉菜单中找到('list')HABTM 相关记录?

CakePHP 在 HABTM 字段中保存数据

CakePHP 在 HABTM 表中保存数据

cakephp 在不使用视图的情况下保存 HABTM 关系的数据