CakePHP - 删除级联不起作用

时间:2011-04-19 07:23:05

标签: cakephp

在CakePHP中,我有一个模型Type和SpecificType。

SpecificType属于Type。 (type_id字段)

当我删除SpecificType的条目时,如何删除Type?

我有

$this->SpecificType->del($id, true)

但是,Type下的条目不会被删除。

谢谢,
三通

3 个答案:

答案 0 :(得分:8)

我认为你不能删除带有SpecificType级联的Type。如果存在hasMany或HABTM关系,则只能使用级联。

在手册中说。

  
    

删除$ id标识的记录。默认情况下,还会删除记录     取决于指定的记录     被删除。

  
     

例如,删除用户时   记录与许多食谱相关联   记录(用户'hasMany'或   'hasAndBelongsToMany'食谱):

* if $cascade is set to true, the related Recipe records are also
     

如果模型依赖值,则删除   设置为true。       *如果$ cascade设置为false,则Recipe记录将保留在   用户已被删除。

你可以随时运行

$this->del($id, true);

删除具有相关SpecificType-s的Type。

答案 1 :(得分:8)

您想要删除Type,而不是SpecificType。您还需要确保为Type输入正确的模型:

var $hasMany = array(
    'SpecificType' => array(
    'className' => 'SpecificType',
    'foreignKey' => 'type_id',
    'dependent'=> true,
    )
);

然后删除类型,它将起作用。

如果要删除子项(SpecificType)并且要删除它的父项,则必须在父模型上调用delete。但请记住,如果您正确设置了级联(模型上为dependent = true),则无论如何都会删除所有SpecificType个孩子。

注意:如果您要删除孩子的父母,您可能需要重新考虑您的关系并确认他们是正确的。如果你真的想要它们,那就不要对孩子进行删除。只需确保正确设置级联关系,拉出子级的父级信息,然后删除父级。然后所有的孩子也将被移除。

答案 2 :(得分:2)

在我不想关注Cake model key convention的情况下,我遇到了同样的问题。

我将SpecificType模型的belongsTo关系设置为Type,如:

public $belongsTo = array(
  'Type' => array(
    'className' => 'Type',
    'foreignKey' => 'type_id',
    'conditions' => '',
    'fields' => '',
    'order' => '',
  ),
);

然后为了让级联删除工作,我将以下内容添加到SpecificType模型中:

public function beforeDelete($cascade) {
  // Make sure the parent method runs.
  $continue = parent::beforeDelete($cascade);

  if ($continue) {
    // Delete the Type if there is one.
    $typeId = $this->field('type_id');
    if (!empty($typeId)) {
      $continue = $this->Type->delete($typeId);
    }
  }

  return $continue;
}

我希望能帮助那些遇到同样问题的人,因为我确信你还没有等待答案。