0

我正在尝试保存这样的数组

$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 。

错误在哪里?我的数组结构无效吗?

4

3 回答 3

0

尝试

$myData = array(
    'User' => array('id' => 17),
    'Group' => array(
        'Group' => array(
            0 => 2,
            1 => 3,
            2 => 4,
            3 => 5,
            4 => 6
        )
    )
);
于 2013-08-20T10:03:50.940 回答
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 关系,因此您只需要这样做:

从用户/组控制器:

$this->User/Group->SaveAll($myData);

从用户/组模型:

$this->SaveAll($myData);

就是这样,GroupsUsers 表将保存 2 条记录,通过自己保存在 HABTM 关系表中,您并没有使用 cakePHP 的强大功能。

如果 ID 不存在,则将创建 User 和 Group 表中的记录,如果不存在则更新。

保存在 HABTM 表中的唯一原因是,如果您想在该表中保存一些额外的信息,例如“已验证”字段,如果您想在成员请求加入组后对其进行验证。

于 2014-01-14T09:56:08.987 回答
0

问题是您的数据数组格式不正确。

您的Group模型可能会有一个id字段,而您的连接模型GroupsUser将有一个group_id字段。

所以你需要改变你group_idid

于 2013-08-20T10:03:07.787 回答