CakePHP:无法更新父级中有多个子级的外键

CakePHP:无法更新父级中有多个子级的外键,cakephp,foreign-keys,has-many,Cakephp,Foreign Keys,Has Many,我似乎无法在父项的编辑函数中更新hasMany关系中子项的外键。我已经检查了数据,我肯定会传递一个不同的父ID,但不管我怎么做,它都会将父ID设置为我正在编辑的父ID 下面是$u POST数据给我的信息: { "Parent" => { "id" => "4", "name" => "Parent" }, "Child" => { "1" =>

我似乎无法在父项的编辑函数中更新hasMany关系中子项的外键。我已经检查了数据,我肯定会传递一个不同的父ID,但不管我怎么做,它都会将父ID设置为我正在编辑的父ID

下面是$u 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函数,但我愿意尝试其他方法。有办法解决这个问题吗?我四处搜索,但似乎找不到解决问题的方法

我的主要目标是从父对象中删除关联,但仍然保留两者的数据。这将允许我释放子对象以与其他模型关联


如果我遗漏了任何重要的细节,请告诉我

所以你现在必须改变你的策略: 使用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函数