在Propel分页中:查询与标准

时间:2012-01-18 18:26:59

标签: php zend-framework orm propel

我在推进中有这个查询

$units = UnitQuery::create()->find();

我正在尝试对返回的结果进行分页,所以我想我需要使用PropelPager,根据文档创建这样的

$criteria = new Criteria();
$criteria->add(BookPeer::AUTHOR, $authorId);
$pager = new PropelPager($criteria, 'BookPeer', 'doSelect', $page = 1, $rowsPerPage = 30);

我不明白如何将我经常使用的1行$units查询转换为$criteria

此外,有没有办法像$units一样使用PropelPager这样的普通查询?这比使用$criteriadoSelect等更改查询更容易。

2 个答案:

答案 0 :(得分:6)

你可以这样做:

$units = UnitQuery::create()
    ->filterByStuff($stuff)
    ->paginate($page = 1, $rowsPerPage = 30);

如果你真的想使用自定义寻呼机(但你可能没有):

$query = UnitQuery::create()->filterByStuff($stuff);
$pager = new MyModelPager($query, $rowsPerPage = 30);
$pager->setPage($page = 1);
$pager->init();

顺便说一下,Propel XXXQuery类只是类固醇的标准;)

答案 1 :(得分:0)

由paginate方法创建的寻呼机是PropelModelPager的一个实例,它是与PropelPager完全不同的类(符合不同的接口)。

当Query对象扩展Criteria时,我也可以使用我认为必要的PropelPager,因为我们使用PropelPager的子类,它可以在其他方面添加缓存。

  
    

$ unitQuery = UnitQuery :: create();

         

$ pager = new PropelPager($ unitQuery,'UnitPeer','doSelect',$ page = 1,$ rowsPerPage = 30);