CakePHP保存两个模型,第二个基于第一个

时间:2010-12-15 17:02:14

标签: cakephp model save

我有以下关联:

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?

谢谢!

2 个答案:

答案 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关联。它不再存在。