嗯,这更像是一个设计问题。 我知道在Zend Framework中使用连接有两种方法
在第一种方法中对我来说似乎很奇怪 - 有些表也必须处理其他表,这不是很好,很乱,至少当我读取方法名称getData()时 - 我认为它处理与自己的数据。
第二个是更好的,你可以有一些作为服务的类 - NodeService,它将处理表节点和node_translation,但它也会产生问题,为什么在这种情况下我们需要Zend Table。 我希望我能够解释自己足够好 感谢。
答案 0 :(得分:1)
从技术上讲,您指的是Zend_Db_Select
和Zend_Db_Table_Select
。 Zend_Db
和Zend_Db_Table
不允许加入。
来自ZF manual on the Select API in chapter Zend_Db_Table
:
Zend_Db_Table_Select对象是Zend_Db_Select对象的扩展,它对查询应用特定限制。增强和限制是:
- 您可以选择在fetchRow或fetchAll查询中返回列的子集。这可以提供优化的好处,因为不希望为所有列返回大量结果。
- 您可以指定从所选表中计算表达式的列。但是,这意味着返回的行或行集将是readOnly,不能用于save()操作。如果尝试执行save()操作,具有readOnly状态的Zend_Db_Table_Row将抛出异常。
- 您可以在select上允许JOIN子句以允许多表查找。
- 您无法指定要在行/行集中返回的JOINed表中的列。这样做会触发PHP错误。这样做是为了确保保留Zend_Db_Table的完整性。即Zend_Db_Table_Row应仅引用从其父表派生的列。
主要区别在于,Zend_Db_Table
和Zend_Db_Table_Select
充当Table Data Gateway,它允许直接访问表及其行,并允许调用方法来破坏表,而{ {1}}不是并且是独立的。