Zend Framework - 数据库表递归级联删除的问题

时间:2010-06-11 14:54:12

标签: mysql zend-framework zend-db-table referential-integrity mysql-error-1451

我的情况可能有点异常,但我在MySQL数据库中定义了外键,同时在Zend_Db_Table类中强制引用完整性。这些表使用InnoDB存储引擎。

删除记录时,Zend Framework将通过表模型中的$_referenceMap正确识别直接子项并删除它们。但是,如果有直接子项的子项,我从数据库中收到有关违反该外键的引用完整性的错误:SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails。似乎Zend_Db_Table_Abstract不以递归方式强制执行引用完整性。

还有其他人遇到过这个吗?是Zend Framework bug吗?解决方法?修复


更新

将近一周后,我对这个问题没有回复。我想我必须自己延长Zend_Db_Table_Row_Abstract课程来实现这一目标。

1 个答案:

答案 0 :(得分:0)

我最终扩展了Zend_Db_Table_Abstract类以完成此任务。 _cascadeDelete公共函数调用数据库适配器delete函数。我进行了更改,以便调用来自delete的{​​{1}}函数。这使记录删除递归。

更新:我添加了有关何时将删除设置为Zend_Db_Table_Row_Abstract的代码。

以下是self::SET_NULL的修改版本:

_cascadeDelete