質問

No matter what I do I can't get it to respect the order I specify.

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

Generated SQL:

SELECT `Car`.`id`, ... `Car`.`year`,... FROM `cars` AS `Car` WHERE 1 = 1 LIMIT 6
役に立ちましたか?

解決

Turns out I was using a :sort in my url parameters. Once I took that out all was well :)

他のヒント

If you only have one item, you don't need/shouldn't use an array:

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

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

(per this page)

Note too that virtual fields are ignored by default when paginating.

See "Control which fields used for ordering" in Cake 2.0 Pagination documentation.

Example:

$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'));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top