Zend framework Zend框架中的多级依赖模型

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 Framework中开发一个应用程序,用于处理一家商业地产租赁公司的租金。该公司有多个建筑物,每个建筑物有多个楼层,每个楼层有多个单元

我设置的模型只是扩展了
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来使用引用完整性,并从框中进行级联删除。。。