我似乎无法在父母的编辑功能中更新 hasMany 关系中孩子的外键。我已经检查了数据,并且我确实传递了不同的父ID,但无论我尝试什么,它都会将父ID设置为我正在编辑的父ID的ID。
以下是$_POST
数据给我的信息:
{
"Parent" => {
"id" => "4",
"name" => "Parent"
},
"Child" => {
"1" => {
"parent_id" => "0",
"id" => "1"
}
}
}
当我看看它正在运行哪个SQL查询时,我得到了这个:
UPDATE `cakephp`.`children` SET `parent_id` = 4, `id` = 1,
`modified` = '2014-01-31 15:37:27' WHERE `cakephp`.`children`.`id` = '1'
我使用saveAll()
功能,但我愿意尝试其他方法。有什么方法可以解决这个问题吗?我已经四处搜索,但似乎无法找到解决问题的方法。
我的主要目标是从父级删除关联,但仍然保留两者的数据。这将允许我释放孩子与其他模型相关联。
如果我遗漏了任何重要细节,请告诉我!
答案 0 :(得分:0)
所以你现在必须改变你的策略: 使用updateAll,如下所示:
$this->Parent->recursive = -1; // free from all association
$this->Parent->updateAll(array('name'=>$myArray['Parent']['name']),
array('id'=>$myArray['Parent']['id']));
$lastId = $this->Parent->getLastInsertID();
与Child模型类似
$this->Child->recursive = -1; // free from all association
$this->Child->updateAll(array('parent_id'=>$lastId),
array('id'=>$myArray['Child']['1']['id']));
如果Child索引里面有多个数组
$updateCondtion = Set::classicExtract($myArray, 'Child.{n}.id');
$this->Child->updateAll(array('parent_id'=>$lastId),
array('id'=>$updateCondtion));
$myArray = {
"Parent" => {
"id" => "4",
"name" => "Parent"
},
"Child" => {
"1" => {
"parent_id" => "0",
"id" => "1"
}
}
}
完全不同的做法!