在我的应用中,Users
HABTM Solicitations
。
使用$this->Solicitation->save($this->request->data)
保存表单后,我需要在solicitations_users表中添加另一个user_id
值。
$data[] = array('User' => array('id' => 5), 'Solicitation' => array('id' => 77));
$data[] = array('User' => array('id' => 6), 'Solicitation' => array('id' => 77));
$this->Solicitation->saveMany($data);
我的$data
就是这样:
array(
'User' => array(
'id' => (int) 6
),
'Solicitation' => array(
'id' => '54'
)
)
我需要在表单中保存关联,然后将上面的新记录添加到solicitations_users
表中。它只保存6
而不保存表单中的数据。如果我删除第二个save
,它只会保存表单。
我意识到在数据库中,这是一个id
。
这应该是'id' 36 => 5; 'id' 37 => 6
。看起来好像正在更新表格。
以下是查询:
答案 0 :(得分:1)
您发布的数据结构是什么样的?
根据the cookbook,它应该是
Array(
'User' => Array(
'id' => 6
),
'Solicitation' => Array(
'title' => 'A request'
)
)
答案 1 :(得分:1)
当您保存habtm关系蛋糕时,删除与该项目相关的所有记录,并重写您正在保存的那些记录。
查看关于它的manual
所以你必须同时保存所有记录,提供如下数组:
试
$data = array(
'Solicitation' => array('id' => 77),
'User' => array(
'User' => array(6, 7)
)
);
$this->Solicitation->saveAll($data);
您还可以在habtm关联数组中设置'unique' =>'keepExisting'
答案 2 :(得分:1)
给这两个中的一个:
$data[] = array('User' => array('id' => 5), 'Solicitation' => array('id' => 77));
$data[] = array('User' => array('id' => 6), 'Solicitation' => array('id' => 77));
$this->Solicitation->saveMany($data, array('deep' => true));
OR
$data[] = array('SolicitationsUser' => array('User.id' => 5,'Solicitation.id' => 77));
$data[] = array('SolicitationsUser' => array('User.id' => 6,'Solicitation.id' => 77));
$this->Solicitation->saveMany($data);
答案 3 :(得分:1)
我认为最简单的方法是使用foreach。象 -
$data[] = array('User' => array('id' => 5), 'Solicitation' => array('id' => 77));
$data[] = array('User' => array('id' => 6), 'Solicitation' => array('id' => 77));
foreach($data as $da){
$this->Solicitation->saveMany($da);
}
答案 4 :(得分:-1)
谢谢你们。
但是,基于这个答案:CakePHP: Creating new HABTM row instead updates other
我发现代替SaveAll
创建一个新行,它会更新已存在的新记录。
因此,我使用query()
添加新行。
$this->Solicitation->query("INSERT INTO `contratos`.`solicitation_users` (user_id,solicitation_id) values($id, $solicitation");
全部谢谢