2012-10-25 80 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" 
);