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

时间:2009-06-07 14:45:11

标签: cakephp has-and-belongs-to-many

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

如您所见,用户体验表之间存在HABTM关联。 experience_users 标记之间的另一个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 方法创建新体验,为两个用户(通过 experience_users )提供此新体验并设置其中的内容。

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

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

1 个答案:

答案 0 :(得分:5)

我明白了。 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-&gt; data 。因此,第二次调用 save()会将数据保存到右表并正确设置外键。