2013-02-28 83 views
0

我使用的Propel努力創造背部和下一個按鈕的功能symfony的工作:如何檢索MySQL記錄列表中的下一個項目?

$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 

回答

1

我不實際使用Symfony的,但如果您使用的是遠程甚至最近的行走版本的它,那麼你可以訪問paginate() method這可能是好了很多,爲你結束。

$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>"; 
    } 
} 

如果你真的想這樣做,你的方式,你可能想消除項目Id的限制完全和簡單地添加你的極限偏移沿:

// 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); 
+0

分頁的解決方案似乎是好的。返回/下一步按鈕是一種分頁。順便說一句,如果@JohnSmith沒有使用最後的推動版本,或者從sf1.4默認使用propel插件,他應該更新到[sfPropelORMPlugin](https://github.com/propelorm/sfPropelORMPlugin)。 – j0k 2013-03-01 10:29:05

相關問題