Cakephp 使用HABTM保存数据,并有许多外键松动
我有一个具有两种关系的用户模型:Cakephp 使用HABTM保存数据,并有许多外键松动,cakephp,model,save,has-and-belongs-to-many,Cakephp,Model,Save,Has And Belongs To Many,我有一个具有两种关系的用户模型: 哈桑德贝隆胃 public $hasAndBelongsToMany = array( 'group' => array( 'className' => 'group', 'foreignKey' => 'user_id' ) ); 有许多 public $hasMany = array( 'phonenumber' => array( 'className' => '
public $hasAndBelongsToMany = array(
'group' => array(
'className' => 'group',
'foreignKey' => 'user_id'
)
);
public $hasMany = array(
'phonenumber' => array(
'className' => 'phonenumber',
'foreignKey' => 'user_id'
)
);
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表中的用户id为“0”
如何保存正确的ID?(CakePHP v 2.5)考虑到CakePHP文档,您会发现以下提示: 在使用关联模型时,重要的是要认识到 保存模型数据应始终由相应的CakePHP完成 模型如果您正在保存一篇新文章及其相关评论,则 在保存操作期间,您将同时使用Post和Comment模型 () 基于这些信息,我建议您尝试以下方法:
$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约定并使用CamelCase模型名。FWIW saveAll()应按广告的方式工作,一次性在子表中填充新的用户id
您是否注意到相关选项:原子和深度
尤其是当数据库不支持事务时,您需要传入原子:
$this->saveAll(array(
'User' => $data,
'phonenumber' => $numbers, //array with data
'group' => $groups //array with data
),
array('atomic' => false)
);
您可以添加存储在数组的$data、$numbers和$groups中的相关数据吗?它有$data=array('name'=>'Jeff','country'=>'USA')组等普通用户数据,phonenumber有array(array('number'=>'123 112')、array('number'=>'321')等数据)我不确定这是否会产生任何后果,但您的类名拼写不正确(不区分大小写)。另外:您是否尝试过设置foreignKey(user_id)在Phonenumber&Group数据中?需要澄清的是:您想添加一个新用户,并使用其自动递增的ID作为用户ID来保存Phonenumber和Group?可能您的错误在JavaScript中。