我的情况可能有点异常,但我在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
课程来实现这一目标。
答案 0 :(得分:0)
我最终扩展了Zend_Db_Table_Abstract
类以完成此任务。 _cascadeDelete
公共函数调用数据库适配器delete
函数。我进行了更改,以便调用来自delete
的{{1}}函数。这使记录删除递归。
更新:我添加了有关何时将删除设置为Zend_Db_Table_Row_Abstract
的代码。
以下是self::SET_NULL
的修改版本:
_cascadeDelete