我有一个有两种关系的用户模型:
HasAndBelongsToMany
public $hasAndBelongsToMany = array(
'group' => array(
'className' => 'group',
'foreignKey' => 'user_id'
)
);
的hasMany
public $hasMany = array(
'phonenumber' => array(
'className' => 'phonenumber',
'foreignKey' => 'user_id'
)
);
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)
答案 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。