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

发布于 2024-07-23 07:06:42 字数 1741 浏览 4 评论 0原文

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

如您所见, 之间存在 HABTM 关联用户体验表。 另一个 HABTM 位于 experiences_userstags 之间。 我创建了以下表格:

<?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,但它永远不会被保存。

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

I'm trying to save data with following structure: alt text

As you can see, there is HABTM association between users and experiences table. And another HABTM between experiences_users and tags. I created following form:

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

And everything works well. saveAll method creates new Experience, assings this new experience to two users (via experiences_users) and sets the stuff around.

What bothers me is that I want to assign some Tags to newly created experiences_users record (to the first one). I thought, that should be done via some of the commented stuff. Every line of this commented code creates form and sends data to $this->data, but it never gets saved.

So my question is: What is the right syntax of $this->data or $form->input in my example to save data into experiences_users_tags?

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

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

发布评论

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

评论(1

○愚か者の日 2024-07-30 07:06:42

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

调用 saveAll() 后,视图

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

控制器

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

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

I figured it out. Cake saveAll function works only for directly associated models. Luckily Cake is able to take care of this:

view

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

controller

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

Cake after calling saveAll() fills $this->data with last inserted id. So second call save() will save data to the right table and set properly foreign keys.

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