CakePHP 在 HABTM 表中保存数据
Posted
技术标签:
【中文标题】CakePHP 在 HABTM 表中保存数据【英文标题】:CakePHP Save data in HABTM Table 【发布时间】:2013-08-20 09:56:38 【问题描述】:我正在尝试保存这样的数组
$myData = array(
'User' => array('id' => 17),
'Group' => array(
array('group_id' => 2),
array('group_id' => 3),
array('group_id' => 4),
array('group_id' => 5),
array('group_id' => 6)
)
);
在我的 HABTM 连接表 (groups_users) 中。我尝试了以下 save 调用,但没有一个奏效。
$this->User->save($myData);
$this->User->saveAssociated($myData);
$this->User->saveAll($myData);
$this->User->GroupsUsers->save($myData);
$this->User->GroupsUsers->saveAll($myData);
在你问之前:是的,我的关联设置正确,我可以通过调用来保存数据:
$this->User->GroupsUsers->saveAll(array(
0 => array(
'GroupsUsers' => array('user_id' => $id, 'group_id' => 1)
),
1 => array(
'GroupsUsers' => array('user_id' => $id, 'group_id' => 2)
)
));
但只保存了两条记录中的一条,尽管我在模型的 HABTM 关系定义中将 unique 设置为 false。
错误在哪里?我的数组结构无效吗?
【问题讨论】:
【参考方案1】:问题是您的数据数组格式不正确。
您的Group
模型可能有一个id
字段,而您的连接模型GroupsUser
将有一个group_id
字段。
所以您需要将您的group_id
更改为id
【讨论】:
【参考方案2】:试试
$myData = array(
'User' => array('id' => 17),
'Group' => array(
'Group' => array(
0 => 2,
1 => 3,
2 => 4,
3 => 5,
4 => 6
)
)
);
【讨论】:
我应该在哪个模型上执行保存调用? 用户模型。 $this->User->saveAll($myData);【参考方案3】:只是为了回答你的问题,即使它是旧的。
您不必在 saveAll 调用中调用您的“GroupsUsers”模型,这正是关联模型的目标,cakephp 为您做到了。
您应该将此数组传递给您的用户/组模型上的 saveAll 函数:
array
array
'User' => array
'id' => 25
,
'Group' => array
'id' => 2
array
'User' => array
'id' => 47
,
'Group' => array
'id' => 2
您的用户模型和组模型应该彼此之间具有 HABTM 关系,因此您只需要这样做:
来自用户/组控制器:
$this->User/Group->SaveAll($myData);
来自用户/组模型:
$this->SaveAll($myData);
就是这样,GroupsUsers 表会保存 2 条记录,通过自己保存在 HABTM 关系表中,你并没有使用 cakePHP 的强大功能。
如果 ID 不存在,则会创建 User 和 Group 表中的记录,如果不存在则更新。
保存在 HABTM 表中的唯一原因是如果您想在该表中保存一些额外信息,例如“已验证”字段,如果您想在他询问后验证成员例如加入一个群组。
【讨论】:
以上是关于CakePHP 在 HABTM 表中保存数据的主要内容,如果未能解决你的问题,请参考以下文章