代码之家  ›  专栏  ›  技术社区  ›  Matěj Zábský

将findManyToManyRowset结果分页

  •  0
  • Matěj Zábský  · 技术社区  · 15 年前

    我有两个数据库表(我们称之为A和B),其中包含多对多桥接表(AB)。我已经为这三个表编写了zend_db_表模型。

    我有一个从数据库中提取的a_row对象,使用例如zend_db_row::find方法。现在我需要打印一个与此行相关的所有行的表。问题是,我需要对该表进行分页,但该表是使用B_行集方法呈现的。

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

    1) 使用zend_paginator_adapter_迭代器对findmanytomanyRowset返回的行集分页。如下所示:

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

    但是,有两个问题:

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

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

    这个解决方案看起来有点太难看了。

    2) 手动构建zend_db_table_select并使用zend_paginator_adapter_db table select。

    但是用zend_db_table_select构建多表查询是非常不准备的(结果需要转换为b_行集)。我可能会得到大约50行杂乱的代码。

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   Jake N    15 年前

    我试过这两种方法,或者至少2种,我确实有一种类似于1的解决方案 findDependentRowset() .

    一个。 工作得很好。设置和工作起来比较困难,但这意味着查询是为我构建的,在实现方面不那么麻烦。

    二。 不过,我最终还是使用了这种方法。它允许更大的灵活性,并且只允许您在需要联接表时联接它们。这也适用于Zend分页。我的解决方案是在我的模型中编写函数,我可以将 Zend_Db_Select 对象,然后模型中的函数将对 ZeNeY-BdSeLead 对象,类似于此。

     // 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;
     }
    

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

    我之前写了“1”和“2”,因为正确的列表语法似乎把突出显示的代码弄乱了。