2012-10-25 126 views
0

我在CakePHP中自定義排序CakePHP中

有一個問題,我有一個數組($ A),其值

Array // in $A 
( 
    [0] => 3 
    [1] => 4 
    ... 
} 

控制器內部:

$conditions[]=array('Room.place_id' =>$A,'Room.status'=>'1'); 

$this->paginate= array(

       'limit' =>50, 

       'recursive' => 2, 

       'conditions' => $conditions, 

       ); 

現在的結果是:

Array 
(
    [0] => Array 
     (
      [Room] => Array 
       (
        [id] => 1 
        [place_id] => 1 
        [type] => place 
       ) 
       ) 
    [1] => Array 
     (
      [Room] => Array 
       (
        [id] => 2 
        [place_id] => 3 
       ) 
     ). 
    ... 

現在我想ord呃使用$ A值(地點ID)...

我想第一個記錄是間[place_id] => 3(因爲$ A [0] = 3)

第二記錄應該是間[place_id] => 4(因爲$一個[1] = 4) 等

+0

我沒有看到你試過什麼東西。 – Dave

+0

我沒有看到提供的信息的解決方案。當然,您可以在視圖中使用兩個「for」循環進行排序。但是這是一個分頁列表,所以應該在查詢內進行排序,否則分頁將無用。 – pleasedontbelong

回答

5

在MySQL可以通過特定字段值訂購,通過使用ORDER BY FIELD

SELECT * FROM rooms WHERE place_id IN (3,1) ORDER BY FIELD(place_id, 3, 1); 

這將按您想要的自定義順序訂購您的房間(首先與place_id=3然後與那些place_id=1)。

要做到這一點的蛋糕:

$this->paginate= array(
    'order' => 'FIELD(Room.place_id, '.implode(',', $A).')', 
    ... 

我假設$A只包含數字,否則你將不得不消毒是進入FIELD表達式的值。

+0

很好..它的工作很好......非常感謝:) 在我使用這個之前 'order'=>'FIELD(Room.place_id,'$ A')', –

+0

這是一個很好的開始。現在在具有多個字段的模型中,是否有比用手寫出更好的解決方案? 例如'public $ order ='active DESC,FIELD(day_of_week,'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'),start_time「;' – Naidim

0

field1將僅顯示頂部爲零的值,您也可以在其他列上添加訂單。

$this->paginate= array(
    'limit' =>50, 
    'recursive' => 2, 
    'conditions' => $conditions, 
    'order' => "FIELD(field1, value) DESC , field2 DESC" // "FIELD(status, 2) DESC , id DESC" 
);