в Propel pagination: запрос и критерии - PullRequest
1 голос
/ 18 января 2012

У меня есть этот запрос в 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?Это было бы проще, чем изменить запрос на использование $criteria, doSelect и т. Д.

Ответы [ 2 ]

6 голосов
/ 21 января 2012

Вы можете просто сделать это:

$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классы просто критерии по стероидам;)

0 голосов
/ 23 апреля 2013

Пейджер, созданный методом paginate, является экземпляром PropelModelPager, который является совершенно другим классом (соответствующим другому интерфейсу) для PropelPager.

Поскольку объект Query расширяет критерии, также можно использовать PropelPager, который я счел необходимым, поскольку мы используем дочерний класс PropelPager, который помимо прочего добавляет кеширование.

$ unitQuery = UnitQuery :: create ();

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

...