Zend framework Zend框架中的多级依赖模型
我正在Zend Framework中开发一个应用程序,用于处理一家商业地产租赁公司的租金。该公司有多个建筑物,每个建筑物有多个楼层,每个楼层有多个单元 我设置的模型只是扩展了Zend framework Zend框架中的多级依赖模型,zend-framework,entity-relationship,zend-db,foreign-key-relationship,zend-db-table,Zend Framework,Entity Relationship,Zend Db,Foreign Key Relationship,Zend Db Table,我正在Zend Framework中开发一个应用程序,用于处理一家商业地产租赁公司的租金。该公司有多个建筑物,每个建筑物有多个楼层,每个楼层有多个单元 我设置的模型只是扩展了Zend\u Db\u Table\u Abstract,我用$\u dependentTables和$\u referenceMap设置了它们,并使用级联删除,这样当我删除一个楼层时,其中的所有单元也会被删除,当我删除一个建筑时,其中的所有楼层都会被删除。但是,当我删除一个建筑并删除楼层时,删除操作不会级联到每个楼层的单元
Zend\u Db\u Table\u Abstract
,我用$\u dependentTables
和$\u referenceMap
设置了它们,并使用级联删除,这样当我删除一个楼层时,其中的所有单元也会被删除,当我删除一个建筑时,其中的所有楼层都会被删除。但是,当我删除一个建筑并删除楼层时,删除操作不会级联到每个楼层的单元。(编辑:我使用的是MySQL,因此无法在db级别使用引用完整性。)
我已经研究了删除是如何级联的,它们似乎不是级联的,因为cacaded删除是使用Zend\u Db\u Table
对象执行的,而不是Zend\u Db\u Table\u Row
对象(您必须使用它来实现级联)
我有没有办法更新系统,这样删除操作就会一直向下级联?有没有一种方法可以修改我的类之间的关系,或者我需要使用类似条令的东西
(我想我可以为每个表或其他内容的行重写delete()
方法,但我只是想知道使用ZF的relationships功能是否可以做到这一点?)
如果有帮助,下面是类定义的相关部分:
class Buildings extends Zend_Db_Table
{
protected $_dependentTables = array('Floors');
}
class Floors extends Zend_Db_Table
{
protected $_dependentTables = array('Units');
protected $_referenceMap = array(
'Building' => array(
'columns' => 'building_id',
'refTableClass' => 'Buildings',
'refColumns' => 'id',
'onDelete' => self::CASCADE,
));
}
class Units extends Zend_Db_Table
{
protected $_referenceMap = array(
'Floor' => array(
'columns' => 'floor_id',
'refTableClass' => 'Floors',
'refColumns' => 'id',
'onDelete' => self::CASCADE,
));
}
只是想确定一下。。。您使用的是不支持引用完整性的RDBMS吗 就我的口味而言,在RDBMS中声明ON-DELETE级联(只要它允许)比在框架中模拟它更容易(而且更可移植,以防将来决定从另一个应用程序访问DB) Zend框架文档似乎也提供了这方面的建议:
对不起-我应该说我使用的是MySQL-正如文档的那一部分所指出的,MySQL不支持引用完整性。@Chris Anstey:MySQL的InnoDB引擎支持外键和级联操作。现在工作得很好-都在MySQL中。谢谢@chelmertz。你想写个答案让我给你分配赏金吗?或者我应该把它交给迪诺普米,因为他大部分时间都在那里。@Chris Anstey:当然是给迪诺普米:)@chelmertz:谢谢:)不过公平地说,也许我们双方都应该这样做。你可以使用InnoDB来使用引用完整性,并从框中进行级联删除。。。