使用Zend从多个数据库表中获取数据是否有最佳实践?我想知道而不是最终想要重构我在不久的将来编写的代码。我正在阅读Zend文档,它说:
“您无法指定列中的列 已加入的表格将被退回 行/行集。这样做会触发一个 PHP错误。这样做是为了确保 Zend_Db_Table的完整性是 保留。即一个Zend_Db_Table_Row 应该只引用派生的列 来自其父表。“
我认为因此我需要使用多个模型 - 这是正确的吗?例如,如果我想要获取特定用户ID的所有订单,其中日期介于两个日期之间,我会做什么?
我知道可以从控制器访问两个不同的模型,然后在动作中合并它们各自的数据但是我不会感到高兴这样做,因为我一直在阅读survthedeepend.com和it tells me that I shouldn't do this ...
在哪里,为什么以及如何? :)
谢谢!
答案 0 :(得分:5)
如果您正在阅读ZFSTDE,请在第9章(http://www.survivethedeepend.com/zendframeworkbook/en/1.0/implementing.the.domain.model.entries.and.authors)中使用数据映射器解决此问题。
此外,您可以加入2个表,只需确保首先使用setIntegrityCheck(false)
方法调用select对象。文档说一行应引用父表,并不意味着它不能:)
答案 1 :(得分:1)
不要再考虑Zend_Db_Table作为“模特”了。
您应该编写自己的,丰富的,以域为中心的模型类,以便位于控制器(和视图)之间,以及持久性逻辑(使用Zend_Db / Zend_Db_Table / Zend_Db_Select的任何东西)来加载/存储数据库中的数据。 / p>
答案 2 :(得分:1)
当然,您可以同时查询多个数据库表。在这里查看官方ZF文档http://framework.zend.com/manual/en/zend.db.select.html#zend.db.select.building.join
至于获取单个用户的所有订单的示例,表关系就是答案http://framework.zend.com/manual/en/zend.db.table.relationships.html