我有以下关联:
Group hasAndBelongsToMany User,groups_users join table。
当我创建一个新组时,我想将连接表添加到组的创建者。
我的$ this->数据数组如下所示:
Array
(
[Group] => Array
(
[name] => seyufgsduifsj
[access] => 2
[founder_id] => 3
[random_key] => I6XC7uMTelpTSdq8DbtLPjqubiF7s6Pn
)
[GroupsUser] => Array
(
[user_id] => 3
[group_role_id] => 1
[random_key] => PZsDZXcoCTHw1IuvqsfURVpPX6AcZ3r2
)
)
我尝试使用save()和saveAll(),但它只会添加组表中的组而不是用户组关联。
所以,基本上,我有一个添加表单,用户填写组名和访问权限。然后,如果数据有效,我会向组数组(如random_key)和连接表数组(如user_id和group_role_id)添加几个字段值。我希望Cake首先保存组,获取其id,使用正确的group_id更新连接表数组,然后保存第二个数组。
这是否可以直接进行,或者我是否必须编写两个后续的save()方法,第二个方法是在第一个中提供最后一个插入的id?
谢谢!
答案 0 :(得分:3)
您可以使用saveAll()函数,但需要更改GroupsUser数组的格式。根据{{3}}的文档,您的数据应如下所示:
Array
(
[Group] => Array
(
[name] => seyufgsduifsj
[access] => 2
[founder_id] => 3
[random_key] => I6XC7uMTelpTSdq8DbtLPjqubiF7s6Pn
)
[GroupsUser] => Array
(
[0] => Array
(
[user_id] => 3
[group_role_id] => 1
[random_key] => PZsDZXcoCTHw1IuvqsfURVpPX6AcZ3r2
)
)
)
如果关系 Group belongsTo GroupsUser ,您的示例将有效,但我相信这不是您的情况
答案 1 :(得分:0)
也许相关模型没有通过验证。使用以下代码仅在所有模型验证时保存:
$this->Group->saveAll($this->data, array('validate' => 'only'));
如果这次没有发现您的群组被保存,那么很可能是您的加入模型中的失败验证规则。我的猜测是您对notEmpty
进行了group_id
验证,您必须将其删除才能使saveAll()正常工作。
希望这能指出你解决问题的方向。
编辑:您的协会有点偏差。这是它应该是什么:
Group hasMany GroupsUser
User hasMany GroupsUser
GroupRole hasMany GroupsUser
GroupsUser belongsTo Group
GroupsUser belongsTo User
GroupsUser belongsTo GroupRole
删除群组和用户之间的hasAndBelongsToMany
关联。它不再存在。