2010-02-24 183 views
1

那它更像是一个设计问题。 有两种方法,我知道用连接在Zend框架处理Zend Framework中的连接的最佳方法是什么?

  1. 处理使用Zend DB(其选择OBJ)的情况下使用Zend表(其选择OBJ)
  2. 新政它的实例吧
在第一种方法

似乎真的很奇怪,我 - 的一些表必须与其他表来处理过,这是不太好,乱七八糟的,至少在我读法名称的getData() - 我承担它处理它自己的数据。

第二个是比较好的,你可以有一些作为服务的类--NodeService,它将处理表节点和node_translation,但是这也产生了问题,为什么我们在这种情况下需要Zend表。 我希望我能够解释我自己足够好 谢谢。

回答

1

从技术上讲,您指的是Zend_Db_SelectZend_Db_Table_SelectZend_DbZend_Db_Table不允许加入。

ZF manual on the Select API in chapter Zend_Db_Table

的Zend_Db_Table_Select对象对象是适用特定限制于查询的Zend_Db_Select对象物体的延伸。增强和限制如下:

  • 您可以选择在fetchRow或fetchAll查询中返回列的子集。这可以提供优化效益,即为所有列返回一大组结果是不可取的。
  • 您可以指定从所选表格中评估表达式的列。但是这意味着返回的行或行集只会被读取,不能用于save()操作。只有当尝试执行save()操作时,带有只读状态的Zend_Db_Table_Row才会抛出异常。
  • 您可以在select上允许JOIN子句以允许多表查找。
  • 您无法指定JOINed表中的行将在行/行集中返回。这样做会触发PHP错误。这样做是为了确保Zend_Db_Table的完整性得以保留。即A Zend_Db_Table_Row应该只引用从其父表派生的列。

的主要区别是,Zend_Db_TableZend_Db_Table_Select充当Table Data Gateway,它允许一个表的直接访问,它的行,并允许调用方法CRUD表,而Zend_Db_Select不和是独立的。

+0

是的,你的指点很明确,只是不想进入细节,但仍然主要的问题是关于使用加入的方法 – simple

+0

@simple对不起。我想我的答案很清楚。只要您不需要Table Data Gateway的附加优势,请使用Zend_Db_Select。 – Gordon

+0

我个人使用Zend_Db_Table_Select 90%的时间(基本上我所有的模型扩展了Zend_Db_Table_Abstract,除了处理xml数据的模型外)。尽管Zend_Db_Select在大多数情况下也很好,但我已经习惯了。 –

相关问题