如何在zend框架中对两个表进行分页

时间:2011-01-23 10:16:56

标签: zend-framework pagination zend-db zend-db-table

图书包含以下字段

  • book_id
  • BOOK_NAME
  • book_auther
  • book_pub_date

类别表

  • CATEGORY_ID
  • CATEGORY_NAME

展示位置表

  • PLACEMENT_ID
  • placement_category_id(FK)
  • placement_book_id(FK)
  

现在我们想在索引控制器中使用分页   选择具有特定类别的书籍?
  所有表都在一个数据库中


注意:我为每个表分离了模型,并且所有表都与$ _referenceMap相互关联 我使用$ adapter = new Zend_Paginator_Adapter_DbTableSelect($ select);
问题是:如何进行$ select?

2 个答案:

答案 0 :(得分:3)

书籍和类别之间存在多对多关系,而您的展示位置表是一个交叉表。因此,我认为可以构造$ select的一种方法是使用内连接,如下所示:

    $placementModel = new Your_Model_Table_Placement();

    $select = $placementModel->select(Zend_Db_Table::SELECT_WITH_FROM_PART)->setIntegrityCheck(false);
    $select->joinInner('BOOKS', 'BOOKS.book_id = PLACEMENT.placement_book_id');
    $select->where('PLACEMENT.placement_category_id = ?', $categoryID);

    $adapter = new Zend_Paginator_Adapter_DbTableSelect($select);

    // check the result if they are what you expect
    var_dump($adapter->getItems(0, 5)->toArray());

当然,表格和模型的名称必须与您的真实姓名一致。 另一种方法是在数据库中创建一个视图。然后,您将为视图创建一个模型。这会使$ select缩短。

答案 1 :(得分:0)

您可以使用此分页类:

http://www.catchmyfame.com/2007/07/28/finally-the-simple-pagination-class/

设置和使用非常简单,然后将其应用于JOINed查询,该查询选择特定类别中的所有书籍(这里的许多书籍比我更好解释)。