CakePHP删除不级联。导致外键错误

时间:2011-06-14 18:18:41

标签: mysql cakephp foreign-keys

我有一个名为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:无法删除或   更新父行:外键   约束失败   (krakecustom_cart_items,   约束custom_cart_items_ibfk_1   外键(custom_cart_id)   参考custom_cartsid))

以下是查询:

DELETE `CustomCart` 
FROM `custom_carts` AS `CustomCart` 
LEFT JOIN `users` AS `User` 
ON (`CustomCart`.`user_id` = `User`.`id`)  
WHERE `CustomCart`.`id` = 25 

它不应该级联并且还会删除其他条目吗?

那我为什么会收到错误?

3 个答案:

答案 0 :(得分:5)

您必须在 hasmany 关系的模型中将依赖参数设置为 true 才能启用级联删除。

您的模型看起来像这样:

class CustomCart extends AppModel {
         var $name = 'CustomCart';
         var $hasMany = array(
         'CustomCartItem' => array(
             'dependent'=> true
         )
);
}

请参阅http://book.cakephp.org/view/82/hasMany

答案 1 :(得分:0)

只是向表中添加字段(无论字段名称如何)都不会告诉CakePHP它们是否已关联,也不会链接它们以进行级联删除。

您需要在模型中设置关联:SEE DETAILS HERE

答案 2 :(得分:0)

另一方面,如果要从表A中删除记录,并且还有另一个表B作为表A上的FOREIGN KEY约束,则必须在表B的该外键上设置选项。像这样的数据库 “SET NULL ON DELETE”。

我通常在MySqlWorkbench中执行此操作,但您也可以使用旧版SQL查询创建具有此选项的表。