CakePHP:无法更新父级中有多个子级的外键
我似乎无法在父项的编辑函数中更新hasMany关系中子项的外键。我已经检查了数据,我肯定会传递一个不同的父ID,但不管我怎么做,它都会将父ID设置为我正在编辑的父ID 下面是$u POST数据给我的信息:CakePHP:无法更新父级中有多个子级的外键,cakephp,foreign-keys,has-many,Cakephp,Foreign Keys,Has Many,我似乎无法在父项的编辑函数中更新hasMany关系中子项的外键。我已经检查了数据,我肯定会传递一个不同的父ID,但不管我怎么做,它都会将父ID设置为我正在编辑的父ID 下面是$u POST数据给我的信息: { "Parent" => { "id" => "4", "name" => "Parent" }, "Child" => { "1" =>
{
"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函数,但我愿意尝试其他方法。有办法解决这个问题吗?我四处搜索,但似乎找不到解决问题的方法
我的主要目标是从父对象中删除关联,但仍然保留两者的数据。这将允许我释放子对象以与其他模型关联
如果我遗漏了任何重要的细节,请告诉我 所以你现在必须改变你的策略: 使用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();
与子模型类似
$this->Child->recursive = -1; // free from all association
$this->Child->updateAll(array('parent_id'=>$lastId),
array('id'=>$myArray['Child']['1']['id']));
如果子索引中有多个数组,则
$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"
}
}
}
完全不同的方法 这确实将父ID设置为原始父ID以外的其他内容,但是现在它正在创建一个新的空父ID,并将ID设置为该ID。我尝试过使用0、-1和null等值,结果都是一样的。递归=-1似乎对子对象不起作用,但这不是什么大问题。似乎我必须重写updateAll函数