CakePHP将数据保存在HABTM表中

时间:2013-08-20 09:56:39

标签: cakephp save has-and-belongs-to-many

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

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

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

3 个答案:

答案 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表中的唯一理由是,如果您想要在此表中保存一些额外信息,例如“验证”字段,如果您想在他询问后验证某个成员例如加入一个小组。