在CakePHP中,我有一个模型Type和SpecificType。
SpecificType属于Type。 (type_id字段)
当我删除SpecificType的条目时,如何删除Type?
我有
$this->SpecificType->del($id, true)
但是,Type下的条目不会被删除。
谢谢,
三通
答案 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;
}
我希望能帮助那些遇到同样问题的人,因为我确信你还没有等待答案。