我已经完成了Zend 2的教程,但对ZendDb组件感到有点失望。事实上,它不能处理外键(作为内置的)。
如何在实际项目(至少有10个不同的表和关系)中处理这个问题?
我是否应该考虑尝试或多或少地重写Zend_Db (ZF1)的findDependentRowset或findParentRow ?如果我认为这是不可能的,那么我错了吗?因为它将打破PHP对象对Data Mapper模式所销售的外部世界一无所知的教条。
我应该总是考虑使用外键/关系的代码与表示实体的对象无关吗?这可能会变成一段漂亮的意大利面条式代码。
我应该放弃ZendDb学说或推进?
这是一个固执己见的问题,因此很快就会结束。最终Doctrine2
(或Propel
)只是做同样的事情,你也可以手动处理ZendDb
和HydrationStrategies
。
问题是,ZendDb
内置了创建自己的Doctrine2
的一切。您可以做完全相同的事情,但是不能将ZendDb
视为一个完全成熟的DBAL。ZendDb
组件用于处理数据库查询。此外,还提供了一些可以使用的东西,如TableGateway
。
然而,如果你期望ZendDb
是一个DBAL,那么你就错了。ZendDb
已经从所有DBAL的东西中解脱出来,因为有更好的解决方案。你提到的那两个首先会浮现在我的脑海里。即使在ZF1中,Zend_Db
-组件也从未能够匹配真正的DBAL可以做的事情,因此在ZF2的设计过程中决定点亮ZendDb
-组件。现在它是非常有用的简单的事情,你可以使用HydrationStrategies
做"ForeingKeyToObject"映射,太,但它需要一点工作。如果你想要一个更简单的解决方案,我将投票给DoctrineModule和DoctrineORMModule