【问题标题】:in Propel pagination: query vs. criteria在推进分页:查询与标准
【发布时间】:2012-01-18 18:26:59
【问题描述】:

我在推进中有这个查询

$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 等更容易。

【问题讨论】:

    标签: php zend-framework orm propel


    【解决方案1】:

    你可以这样做:

    $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 类只是类固醇的标准;)

    【讨论】:

      【解决方案2】:

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

      由于 Query 对象扩展了 Criteria,因此也可以使用我认为必要的 PropelPager,因为我们使用了 PropelPager 的子类,它添加了缓存等功能。

      $unitQuery = UnitQuery::create();

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 2013-06-03
        • 2012-03-08
        相关资源
        最近更新 更多