我正在尝试保存像这样的数组
$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)中。我尝试了以下保存电话,但无的电话有效。
$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。
错误在哪里?我的数组结构无效吗?
答案 0 :(得分:0)
问题是您的数据阵列格式不正确。
您的Group
模型可能会有一个id
字段,您的加入模型GroupsUser
会有一个group_id
字段。
因此,您需要将group_id
更改为id
答案 1 :(得分:0)
试
$myData = array(
'User' => array('id' => 17),
'Group' => array(
'Group' => array(
0 => 2,
1 => 3,
2 => 4,
3 => 5,
4 => 6
)
)
);
答案 2 :(得分:0)
即使它已经陈旧,也只是回答你的问题。
您无需在saveAll调用中调用“GroupsUsers”模型,这正是关联模型的目标,cakePHP会为您做到这一点。
您应该将此数组传递给用户/组模型上的saveAll函数:
array{
array{
'User' => array {
'id' => 25
},
'Group' => array {
'id' => 2
}
}
array{
'User' => array {
'id' => 47
},
'Group' => array {
'id' => 2
}
}
}
您的用户和群组模型都应该具有HABTM和HABTM关系,因此您只需要这样做:
来自用户/组控制器:
$this->User/Group->SaveAll($myData);
来自用户/组模型:
$this->SaveAll($myData);
就是这样,GroupsUsers表将保存2条记录,通过自己保存在HABTM关系表中,你没有使用cakePHP的强大功能。
如果ID不存在,将创建用户和组表中的记录,如果不存在则更新。
保存在HABTM表中的唯一理由是,如果您想要在此表中保存一些额外信息,例如“验证”字段,如果您想在他询问后验证某个成员例如加入一个小组。