0

Propel を使用して symfony を使用して、戻るボタンと次のボタンの機能を作成しようとしています:

$c = new Criteria();

$c->add(CartPeer::CATEGORY, $category);
$c->add(CartPeer::ITEM_ID, $item->getItemId(), Criteria::GREATER_THAN);
$c->addAscendingOrderByColumn(CartPeer::ITEM_NAME);

$this->next = CartPeer::doSelectOne($c);

これで、アイテムの識別子が昇順であれば問題なく動作しますが、通常はそうではありません。

$item次の昇順の数値 ID を持つアイテムを選択するのではなく、返されたレコードのリストで現在のアイテムの直後にアイテムを選択するように、このコードを変更するにはどうすればよいですか?

例:

Record: 0 | ItemID: 5
Record: 1 | ItemID: 2
Record: 2 | ItemID: 7 <-- $item
Record: 3 | ItemID: 4 <-- I want this to be $next
Record: 4 | ItemID: 9
4

1 に答える 1

1

私は実際には Symfony を使用していませんが、リモートで最新バージョンの Propel を使用している場合でも、最終的にははるかに優れたpaginate()方法にアクセスできます。

$pager = CartQuery::create()
           ->filterByCategory($category)
           ->orderBy(CartPeer::ITEM_NAME)
           ->paginate($pageToLoad, $resultsPerPage);
foreach($pager as $result) {
  // do something with the record
}
if ($pager->haveToPaginate()) {
  // build some paging items using PropelModelPager methods:
  if (!$pager->isFirstPage()) {
    echo "<a href='?page=".$pager->getPreviousPage()."'>Previous</a>";
  }
  if (!$pager->isLastPage()) {
    echo "<a href='?page=".$pager->getNextPage()."'>Next</a>";
  }
}

本当に自分のやり方でやりたい場合は、ItemId による制限を完全に取り除き、制限とともにオフセットを追加するだけでよいでしょう。

// This will be however many results have already been shown (page size?)
$offset = 10;

$c = new Criteria();
$c->add(CartPeer::CATEGORY, $category);
$c->addAscendingOrderByColumn(CartPeer::ITEM_NAME);
$c->setOffset($offset);
$this->next = CartPeer::doSelectOne($c);
于 2013-03-01T04:27:54.893 に答える