从Zend框架中的行集(不是单行)中检索相关行集

时间:2012-02-06 22:20:47

标签: php sql zend-framework frameworks

我想知道我是否可以使用Zend框架有效地检索其他相关行而无需使用大量自定义代码。我将使用Bugs数据库的Zend示例转换为我的问题:

$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();       
$bugsReportedByUser = $user1234->findDependentRowset('Bugs');

但是,在我的情况下,Bugs表会有额外的依赖项,在本例中可能是BugReproduction。如何检索这些复制品(具有多对一错误)。 对 $ bugsReportedByUser foreach 进行编码似乎非常糟糕,并获取其他dependentRowsets以获取Reproductions。这将导致'n'顺序查询,而每个请求总是需要固定数量的查询。

这对于Joins来说似乎微不足道,但我在Zend生态圈中找不到合理的方法。

1 个答案:

答案 0 :(得分:1)

嗯,我认为很长很难,但它归结为rowset-method-> getDependentRowset的基本缺失。 (不要误认为是一行(单数) - > getDepedentRowset())

因此扩展Zend_Db_Table_Row_Abtract,并在示例的Bugs Table类中使用它:

class BugsTable extends Zend_Db_Table_Abstract
{
    protected $_name = 'bugs';
    protected $_rowsetClass = 'MyRowset';
...

并且在MyRowSet中实现了findDependentRowset($ dependentTable)。高级实现将是:

  1. 将错误主键检索为$ids(数组)。
  2. 调用bugsTable->find($ids)(可以使用Zend_Db_Table_Relationship找到关系)
  3. 您现在拥有来自行* s *
  4. 的多个的所有相关行
  5. 可选:ReproductionMapper逻辑会将它们映射到对象。然后BugsMapper逻辑可以将它们添加到高级错误模型(而不是BugsTable)