处理Zend Framework中的连接的最佳方法?

时间:2010-02-24 14:01:27

标签: php zend-framework oop coding-style

嗯,这更像是一个设计问题。 我知道在Zend Framework中使用连接有两种方法

  1. 使用Zend表的实例(其Select obj)处理它
  2. 使用Zend Db(其Select obj)实例处理它
  3. 在第一种方法中对我来说似乎很奇怪 - 有些表也必须处理其他表,这不是很好,很乱,至少当我读取方法名称getData()时 - 我认为它处理与自己的数据。

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

1 个答案:

答案 0 :(得分: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查询中返回列的子集。这可以提供优化的好处,因为不希望为所有列返回大量结果。
  •   
  • 您可以指定从所选表中计算表达式的列。但是,这意味着返回的行或行集将是readOnly,不能用于save()操作。如果尝试执行save()操作,具有readOnly状态的Zend_Db_Table_Row将抛出异常。
  •   
  • 您可以在select上允许JOIN子句以允许多表查找。
  •   
  • 您无法指定要在行/行集中返回的JOINed表中的列。这样做会触发PHP错误。这样做是为了确保保留Zend_Db_Table的完整性。即Zend_Db_Table_Row应仅引用从其父表派生的列。
  •   

主要区别在于,Zend_Db_TableZend_Db_Table_Select充当Table Data Gateway,它允许直接访问表及其行,并允许调用方法来破坏表,而{ {1}}不是并且是独立的。