使用Zend框架时从多个表中获取数据?

时间:2010-08-26 18:10:19

标签: php zend-framework zend-db-table

使用Zend从多个数据库表中获取数据是否有最佳实践?我想知道而不是最终想要重构我在不久的将来编写的代码。我正在阅读Zend文档,它说:

  

“您无法指定列中的列   已加入的表格将被退回   行/行集。这样做会触发一个   PHP错误。这样做是为了确保   Zend_Db_Table的完整性是   保留。即一个Zend_Db_Table_Row   应该只引用派生的列   来自其父表。“

我认为因此我需要使用多个模型 - 这是正确的吗?例如,如果我想要获取特定用户ID的所有订单,其中日期介于两个日期之间,我会做什么?

我知道可以从控制器访问两个不同的模型,然后在动作中合并它们各自的数据但是我不会感到高兴这样做,因为我一直在阅读survthedeepend.com和it tells me that I shouldn't do this ...

在哪里,为什么以及如何? :)

谢谢!

3 个答案:

答案 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