Порядок Cakephp по набору результатов для поиска - PullRequest
0 голосов
/ 13 января 2012

Как мне изменить опцию порядка поиска запросов, чтобы имя результата показывалось первым для результата?

$params = array(
                        'fields' => array('User.firstname', 'User.lastname', 'User.username', 'User.lat', 'User.lng', 'User.thumbnail_image', 'User.status', '6371 * ACos( Cos( RADIANS( User.lat ) ) * Cos( RADIANS( '.$lat.' ) ) * Cos( RADIANS( '.$lng.' ) - RADIANS( User.lng ) ) + Sin( RADIANS( User.lat ) ) * Sin( RADIANS( '.$lat.' ) ) ) as distance'),
                        'limit' => 15,
                        'recursive' => 1,
                        'offset' => $offset,
                        'order' => array('User.status DESC','User.lastname ASC', 'distance ASC')
                        //'conditions' => array('User.id !=' => $user_id)
                        );
                $results = $this->User->find('all', $params);

Я до сих пор получил это, но, кажется, не могу изменить это так для определенного пользователя (1 пользователь) появляется в первом ряду результатов.

Есть ли решение для этого в Cakephp?

1 Ответ

0 голосов
/ 13 января 2012

Необработанный SQL, который вам нужен, может выглядеть так:

SELECT 
CASE WHEN User.id = 200
  THEN 0 
  ELSE 1  END as user_sort, ... rest, of, your, params
ORDER BY user_sort, ... rest, of, your, ordering, criteria
LIMIT 15

В CakePHP вы должны использовать виртуальное поле для создания user_sort, а затем просто добавить его в массив ваших заказов.

В вашей модели пользователя добавьте виртуальное поле для user_sort:

public $virtualFields = array(
        'user_sort' => 'if( User.id  = 200 , 0 , 1)'    
);

Затем вы добавили бы в свой массив заказов примерно так:

array('User.user_sort','User.status DESC','User.lastname ASC', 'distance ASC')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...