CakePHP:无法为父级中的hasMany子级更新外键

时间:2014-01-31 20:54:22

标签: cakephp foreign-keys has-many

我似乎无法在父母的编辑功能中更新 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()功能,但我愿意尝试其他方法。有什么方法可以解决这个问题吗?我已经四处搜索,但似乎无法找到解决问题的方法。

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

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

1 个答案:

答案 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"
            }
        }
       }

完全不同的做法!