使用HABTM和HasMany保存数据会丢失foreignKey

时间:2015-02-25 11:25:16

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

我有一个有两种关系的用户模型:

  1. HasAndBelongsToMany

    public $hasAndBelongsToMany = array(
        'group' => array(
            'className' => 'group',
            'foreignKey' => 'user_id'
        )
    );
    
  2. 的hasMany

    public $hasMany = array(
      'phonenumber' => array(
        'className' => 'phonenumber',
        'foreignKey' => 'user_id'
      )
    );
    
  3. Phonenumber和Group已经设定

    public $belongsTo = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'user_id'
        )
    );
    

    当我使用

    $this->saveAll(array(
                'User' => $data, 
                'phonenumber' => $numbers, //array with data
                'group' => $groups //array with data
       )
    );
    

    数据保存在表格中,但在phonenumber和group table中User_id为“0”。

    如何保存正确的ID? (CakePHP v 2.5)

2 个答案:

答案 0 :(得分:2)

FWIW saveAll()按照宣传的方式工作,一举填充子表中的新user_id。

您是否注意过相关选项:原子和放大器深?

特别是如果数据库不支持事务,您需要传递原子:

$this->saveAll(array(
            'User' => $data, 
            'phonenumber' => $numbers, //array with data
            'group' => $groups //array with data
   ),
   array('atomic' => false)
);

答案 1 :(得分:0)

考虑到CakePHP文档,您将找到以下提示:

  

使用相关模型时,重要的是要意识到这一点   保存模型数据应始终由相应的CakePHP完成   模型。如果您要保存新帖子及其关联的评论,那么   您将在保存操作期间使用Post和Comment模型   http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-hasone-hasmany-belongsto

根据这些信息,我建议您尝试以下方法:

$this->User->save($data);  // first save the user

假设您有多个号码:

foreach($numbers as $key => $nbr) {
    // set user_id related data
    $numbers[ $key ]['Phonenumber']['user_id'] = $this->User->id;
}

最后保存您的相关数据:

$this->User->Phonenumber->saveAll($numbers);

由于此代码未经测试,您可能需要进行一些调整。始终确保遵循Cake-Conventions并使用CamelCase ModelNames。