2016-12-02 29 views
0

在sql中,我有這個查詢,它完美地工作並按照「按字段排序」給定的數組排序。但在cakephp中它不起作用。如何在cakephp中寫入orderByField 3

SELECT * FROM users 
WHERE users.Id IN (3,7,2,13) 
ORDER BY FIELD(users.Id ,3,7,2,13) 

我按以下順序獲取用戶。這是完美的

user _id 
3 
7 
2 
13 

CakePHP的3

$unique_user_id_list = (3,7,2,13); 
$id_list = '3','7','2','13';  This is string. 

$users = $this->Users->find('all',[ 
       'contain' => [],   
       'conditions'=>['Id IN' => $unique_user_id_list], 
       'order BY FIELD'=>['Users.Id'=>$id_list] 
      ]); 

在此查詢,我得到用戶按照以下順序

user_id 
    2 
    3 
    7 
13 

我都嘗試以下方法,但沒有一個人的工作。只有「訂單」條款給出了錯誤,而另一個「按字段排序」沒有提供任何錯誤,但不能按預期工作。

'order'=>['Users.Id'=>$id_list] 
    'order BY FIELD'=>['Users.Id'=>$id_list] 

任何想法如何在cakephp 3上面寫入sql查詢來獲得它的工作。

回答

0

嘗試格式化命令語句如下

->order(['users.Id'=>'ASC']); 
+0

我不希望被用戶ID ASC或DESC。實際上我需要它們按照給定的順序排列。但是,謝謝。 – learner

1

回答這個問題 總而言之一句話'order' => "FIELD(id, '2', '3', '7', '13')"

詳細首次使用循環數組轉換成字符串。

$id_list; 

foreach ($unique_user_id_list as $key => $value) { 
       if($check == 1){ 
        $id_list = 'FIELD (Id'.',' . "'". $value. "'"; 
        $check =2; 
       } 
       else{ 
        $id_list = $id_list . "," . "'". $value. "'"; 
       } 

      } 
      $id_list = $id_list . ")"; 

上面的循環怎麼用它在下面給出將產生"FIELD(id, '2', '3', '7', '13')"

完全查詢。

$users = $this->Users->find('all',[ 
        'contain' => [], 
        'conditions'=>['Id IN' => $unique_user_id_list], 
        'order'=> $id_list 
       ]);