在 CakePHP 中使用 HABTM 进行保存

发布于 2024-07-29 19:42:33 字数 506 浏览 5 评论 0原文

我正在一次性创建多个关联,并且在保存方面存在一些问题。

我有以下代码:

<?php
foreach($userData as $user) {
    $data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
    $this->User->save($data);
}
?>

尽管我总是遇到相同的问题,但我已经尝试以不同的方式格式化数据数组。 当插入新条目时,先前的条目会被移动,或者当前条目会被更新。

尽管我需要触发行为,但我可以使用以下内容。

$this->User->SiteUser->save($data);

编辑:另外 $this->User->create(); 似乎没什么作用。

I am creating multiple associations in one go and there are a few problems when it comes to saving.

I have the following code:

<?php
foreach($userData as $user) {
    $data = array('User' => array('id' => $user['id']), 'Site' => array('id' => $user['site_id']));
    $this->User->save($data);
}
?>

I have experimented with formatting the data array in different ways although I always encounter the same problems. Either the previous entries get moved when a new one is inserted or the current one gets updated.

I could just use the following although I need a behavior to trigger.

$this->User->SiteUser->save($data);

Edit: Also $this->User->create(); doesn't seem to do much.

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

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

发布评论

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

评论(2

潜移默化 2024-08-05 19:42:33

IRC 帮助找出了问题所在,一旦unique键设置为false,一切都能够正确保存。

//In the user model
var $hasAndBelongsToMany = array(
  'Site' => array(
    'className' => 'Site',
    'unique' => false
  )
);

The IRC helped work out what was wrong, once the unique key was set to false everything was able to save correctly.

//In the user model
var $hasAndBelongsToMany = array(
  'Site' => array(
    'className' => 'Site',
    'unique' => false
  )
);
不醒的梦 2024-08-05 19:42:33

尝试在新的 save() 之前重置 id,可能在两种模型上:

$this->User->id = null;

Cake 决定是否根据设置的 id 更新或插入条目,并且 save() 自动设置 id。 不知道为什么 create() 不为您处理这个问题。

另外,如果您想保存 HABTM 数据,您应该需要使用 saveAll() 而不是 save()。 另请参阅此问题

Try resetting the id before a new save(), possibly on both models:

$this->User->id = null;

Cake decides whether to update or insert entries based on the set id, and save() sets an id automatically. Not sure why create() doesn't take care of this for you.

Also, if you want to save HABTM data, you should need to use saveAll() instead of save(). Also see this question.

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