2012-01-31 2 views
2

Независимо от того, что я делаю, я не могу заставить его соблюдать заказ, который я указываю.CakePHP this-> paginate не используя поле заказа

$this->paginate = array(
    'Car' => array(
     'limit' => 6, 
     'order' => array(
      'Car.year' => 'desc' 
     ), 
     'table' => 'cars' 
    ) 
); 

Сгенерированный SQL:

SELECT `Car`.`id`, ... `Car`.`year`,... FROM `cars` AS `Car` WHERE 1 = 1 LIMIT 6 
+0

Я попытался указать его в верхней части контроллера с помощью 'вар $ paginate', а также принимая его за пределы«Автомобиль»=> массив Независимо от того, что я делаю, я не может получить его на заказ. Другие модели заказывают штраф для меня, хотя: S Пожалуйста, помогите! – KieranYo

+1

Почему вы определяете стол? ИМО не требуется. также попробуйте сгладить массив (нет автомобиля с subarray, просто «лимит», «порядок», ...) – mark

+0

Спасибо, Марк, честно говоря, я просто пытаюсь все, о чем я могу думать. Извлечение этих вещей также не устраняет проблему. – KieranYo

ответ

5

Оказывается, я использовал: sort в моих параметрах url. Как только я это понял, все было хорошо :)

1

Если у вас есть только один элемент, вам не нужно/не должны использовать массив:

//one thing 
var $order = "Model.field DESC"; 

//multiple things 
var $order = array("Model.field" => "asc", "Model.field2" => "DESC"); 

(per this page)

+0

Я тоже это пробовал, но это не сработало. Должно ли это указываться в верхней части контроллера? – KieranYo

+0

нет, ваш должен работать. но вы все еще не показали нам важной роли о том, как вы действительно извлекаете данные. может быть, ваша ошибка. – mark

+0

@KieranYo - Даже если это не решит вашу проблему, я бы сохранил ее как не-массив, а затем продолжил искать дальше. У меня была схожая проблема много раз, и я всегда исправляю ее, удаляя массив. – Dave

0

Обратите внимание, что виртуальные поля по умолчанию игнорируются при разбиении на страницы.

См. «Управление полями, используемыми для заказа» в документации Cake 2.0 Pagination.

Пример:

$this->MyModel->virtualFields['count'] = 0; 
$this->Paginator->settings = array(
     'fields' => 'COUNT(id) AS MyModel__count', 
     'group' => ('MyModel.group_id'), 
     'order' => array('MyModel__count' => 'DESC'), 
    ); 
// IMPORTANT: pass sortable fields including the virtual field as 3rd parameter: 
$log = $this->Paginator->paginate('MyModel', null, array('MyModel__count', 'id')); 

 Смежные вопросы

  • Нет связанных вопросов^_^