2010-03-13 37 views
5

我有一個訂購商品列表,根據int字段order排序。 我在CakePHP 1.2中創建了一個有prev和next按鈕的畫廊,這些應該按照他們的順序鏈接到上一個和下一個項目,而不是根據他們的idCakePHP:查找鄰居,在'name'或'order'上訂購

爲了得到這個結果,我在find函數中包含了'order'參數,並用'Item.order'=>'DESC'填充它。結果仍是id有序列表。

我的問題是:我做錯了什麼? 我的控制器:

$this->Item->id = 16;

$neighbours = $this->Item->find('neighbors', array('order'=>array('Item.order'=>'DESC'), 'fields'=>array('id','name')));

解決方案 我已經嘗試了不同的方法。我的代碼現在做的工作,如下所示:

$order = $this->Item->findById(6);

$neighbours = $this->Item->find('neighbors', array('field'=>'order', 'value'=>$order['Item']['order']));

由參數'field'設置到外地將是排序字段,並設置'value'參數到訂單價值你當前的項目,你會得到prevnext

回答

4

是的問題是你沒有在你的字段數組中包含順序字段。

$neighbours = $this->Item->find('neighbors', array(
    'order' => 'order DESC', 
    'fields' => array('id', 'name', 'order') 
)); 

除非您與衝突的字段名稱相關的模型,你並不需要包括Item.型號前綴(雖然我平時反正來避免這樣的錯誤。)你原來的語法將工作,如果你已經列入[Item.]order in「fields」

最後,您的解決方案並不是最優的,當您不需要時,您可以創建兩個SQL查詢。和「字段」不是一個查詢選項,據我所知,這實際上意味着你要返回表中的所有字段。

+0

你是救命恩人! – Bagata 2013-06-11 04:37:17

0

我遇到了這個問題。基本上我有一個問題列表,每個用戶會話需要隨機排序(僅限一次)。

我是模型的階數設爲這樣的事情:

'FIELD(TestQuestion.id, 3, 1, 5)'; 

這對正常的查詢,工作正常,但鄰居發現是通過線2897在型號阻礙。PHP:

$query['order'] = $field . ' DESC'; 

所以要解決它,我做了以下內容:

  • 添加一個名爲 'examination_order' 虛擬現場,並設置爲是:

    $this->TestQuestion->virtualFields['examination_order'] = 'FIELD(TestQuestion.id, 3, 1, 5)'; 
    
    $this->TestQuestion->order = array(
        $this->TestQuestion->alias . '.examination_order' 
    ); 
    
  • 在查找鄰居呼叫中,將'field'設置爲'examination_order',並將值設置爲以前找到的索引:

    $neighbors = $this->TestQuestion->find(
        'neighbors', 
        array(
         'field' => 'examination_order', 
         'value' => $testQuestion[$this->TestQuestion->alias]['examination_order'], 
         'conditions' => $conditions 
        ) 
    );