MikeTheTall
MikeTheTall

Reputation: 3563

findall ignoring order parameter?

I'm trying to use the following:

    $this->Chapter->recursive=1;
    $chaps = $this->Chapter->find('all', array(
         'order'=> array('sequence_number' => 'ASC') 
    ));
    $this->set('chapters', $chaps );

to retrieve all my chapters by increasing order, but CakePHP seems to be ignoring the 'order' parameter. I believe that I have the syntax correct (based on view-source:http://book.cakephp.org/2.0/en/models/retrieving-your-data.html#creating-custom-find-types, which says the following should work:

public function index() {
    $articles = $this->Article->find('available', array(
        'order' => array('created' => 'desc')
    ));
}

). The SQL for the table looks like:

CREATE TABLE chapters (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sequence_number INT UNSIGNED,
    title VARCHAR(50)
);

and I'm not getting any syntax or run-time errors. However, the SQL generated by Cake to actually get the chapter records is:

SELECT `Chapter`.`id`, `Chapter`.`sequence_number`, `Chapter`.`title` 
FROM `Tutorial`.`chapters` AS `Chapter` WHERE 1 = 1

Clearly I'm doing something wrong, but I don't know what it is.

As a work-around I'm happy to put an order property on the Model. Since I typically want to retrieve chapters by sequence number I'm fine with adding this to the model:

public $order = 'Chapter.sequence_number ASC';

Once I do that Cake generates

SELECT `Chapter`.`id`, `Chapter`.`sequence_number`, `Chapter`.`title` 
FROM `Tutorial`.`chapters` AS `Chapter` WHERE 1 = 1 
ORDER BY `Chapter`.`sequence_number` ASC

Upvotes: 1

Views: 71

Answers (1)

summea
summea

Reputation: 7583

What if you try something like this, instead:

$chaps = $this->Chapter->find('all', array(
     'order' => array('Chapter.sequence_number ASC') 
));

The main difference being this part: Chapter.sequence_number ASC

Upvotes: 2

Related Questions