如何解决CakePHP删除不级联导致外键错误
| 我有一个名为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查询来创建带有此类选项的表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。