分页findManyToManyRowset结果

时间:2010-08-13 17:22:25

标签: php zend-framework

我有两个数据库表(让我们称之为A和B)与多对多桥表(AB)。我为所有三个表编写了Zend_Db_Table模型。

我有一个A_Row对象,我使用例如Zend_Db_Row :: find方法从数据库中提取。现在我需要打印一个包含所有行的表,这些行与此行有关。问题是我需要对此表进行分页,但是使用B_Rowset方法呈现表。

我可以看到两个选项(如果我想使用Zend_Paginator)

1)使用Zend_Paginator_Adapter_Iterator对findManyToManyRowset返回的行集进行分页。这看起来像这样:

$b_rowset = $a_row->findManyToManyRowset('B_Table', 'AB_Table');
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_Iterator($b_rowset));

然而,有两个问题:

a)获取整个结果集(不仅是页面上的项目)。

b)我使用B_Rowset的方法来呈现表格HTML,因此我必须将结果转换回结果集。

这个解决方案似乎有点太难看了。

2)手动构建Zend_Db_Table_Select并使用Zend_Paginator_Adapter_DbTableSelect。

但是使用Zend_Db_Table_Select构建多表查询是非常不合适的(并且结果需要转换为B_Rowset)。我最终会得到50行左右的混乱代码。

我可以使用任何一种方法(我可能会比写这篇文章更快),但我希望看到一些意见,如何很好地解决这个问题(因为我希望一次又一次地遇到这种情况)

1 个答案:

答案 0 :(得分:0)

我已经尝试了这两个,或者至少有2个,我确实有一个类似于1使用findDependentRowset()的解决方案。

一个。工作得很好。设置和工作起来比较困难,但这意味着在实现时为我构建查询的麻烦更少。

两个。我最终使用了这种方法。它允许更大的灵活性,并允许您仅在需要加入表时才连接表。这也适用于Zend分页。我的解决方案是在我的模型中编写函数,我可以将Zend_Db_Select对象传递给它,然后模型中的函数将连接应用于Zend_Db_Select对象,类似于此。

 // In Model A, you would create a function to join table B
 // this is much simpler, but hopefully you get the idea
 function joinB(Zend_Db_Select &$select)
 {
      $select->join(...);
      return $this;
 }

这当然不是每个人的解决方案,但它为我提供了我需要的东西。

之前我写过'one'和'two',因为正确的列表语法似乎搞乱了突出显示的代码