问题描述
|
我有一个名为
custom_carts
的表,并且有一个名为custom_cart_items
的表。
custom_cart_items
有一个称为custom_cart_id
的外键,它设置为custom_cart.id
根据Cake手册,当您调用Model-> delete()时,第一个参数是要删除的条目的ID,第二个参数是是否级联删除相关条目。
因此,当我致电$this->CustomCart->delete(7,true)
时,会出现此错误:
SQL错误:1451:无法删除或
更新父行:外键
约束失败
(`krake`。`custom_cart_items`,
CONSTRAINT`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
它也不应该级联并束缚另一个条目吗?
那我为什么会出错?
解决方法
您必须在具有hasmany关系的模型中将相关参数设置为true才能启用级联删除。
您的模型如下所示:
class CustomCart extends AppModel {
var $name = \'CustomCart\';
var $hasMany = array(
\'CustomCartItem\' => array(
\'dependent\'=> true
)
);
}
请参阅http://book.cakephp.org/view/82/hasMany
, 仅将字段添加到表中(无论字段名称如何)都不会告诉CakePHP它们已关联,也不会链接它们以进行级联删除。
您需要在模型中设置关联:请在此处查看详细信息。
, 另一方面,如果要从表A中删除一条记录,并且有另一个表B作为对表A的FOREIGN KEY约束,则必须在数据库中对表B的该外键设置选项这个
\“ SET NULL ON DELETE \”。
我通常在MySqlWorkbench中执行此操作,但是您也可以使用旧版SQL查询来创建带有此类选项的表。