我有一个名为custom_carts
的表,我有一个名为custom_cart_items
的表。
custom_cart_items
有一个名为custom_cart_id
的外键,设置为custom_cart.id
根据Cake Manual,当您调用Model-> delete()时,第一个参数是您要删除的条目的ID,第二个参数是是否级联删除依赖条目。
因此,当我致电$this->CustomCart->delete(7,true)
时,我收到此错误:
SQL错误:1451:无法删除或 更新父行:外键 约束失败 (
krake
。custom_cart_items
, 约束custom_cart_items_ibfk_1
外键(custom_cart_id
) 参考custom_carts
(id
))
以下是查询:
DELETE `CustomCart`
FROM `custom_carts` AS `CustomCart`
LEFT JOIN `users` AS `User`
ON (`CustomCart`.`user_id` = `User`.`id`)
WHERE `CustomCart`.`id` = 25
它不应该级联并且还会删除其他条目吗?
那我为什么会收到错误?
答案 0 :(得分:5)
您必须在 hasmany 关系的模型中将依赖参数设置为 true 才能启用级联删除。
您的模型看起来像这样:
class CustomCart extends AppModel {
var $name = 'CustomCart';
var $hasMany = array(
'CustomCartItem' => array(
'dependent'=> true
)
);
}
答案 1 :(得分:0)
只是向表中添加字段(无论字段名称如何)都不会告诉CakePHP它们是否已关联,也不会链接它们以进行级联删除。
您需要在模型中设置关联:SEE DETAILS HERE。
答案 2 :(得分:0)
另一方面,如果要从表A中删除记录,并且还有另一个表B作为表A上的FOREIGN KEY约束,则必须在表B的该外键上设置选项。像这样的数据库 “SET NULL ON DELETE”。
我通常在MySqlWorkbench中执行此操作,但您也可以使用旧版SQL查询创建具有此选项的表。