diff --git a/lib/Cake/Model/Model.php b/lib/Cake/Model/Model.php index 3813e3883..8b9534a40 100644 --- a/lib/Cake/Model/Model.php +++ b/lib/Cake/Model/Model.php @@ -3083,7 +3083,11 @@ class Model extends CakeObject implements CakeEventListener { $query['order'] = $this->order; } - $query['order'] = (array)$query['order']; + if (is_object($query['order'])) { + $query['order'] = array($query['order']); + } else { + $query['order'] = (array)$query['order']; + } if ($query['callbacks'] === true || $query['callbacks'] === 'before') { $event = new CakeEvent('Model.beforeFind', $this, array($query)); diff --git a/lib/Cake/Test/Case/Model/ModelReadTest.php b/lib/Cake/Test/Case/Model/ModelReadTest.php index b42239f08..851290547 100644 --- a/lib/Cake/Test/Case/Model/ModelReadTest.php +++ b/lib/Cake/Test/Case/Model/ModelReadTest.php @@ -7423,7 +7423,7 @@ class ModelReadTest extends BaseModelTest { } /** - * Test find(count) with Db::expression + * Test find(count) with DboSource::expression * * @return void */ @@ -7445,6 +7445,38 @@ class ModelReadTest extends BaseModelTest { $this->assertEquals(1, $result); } +/** + * Test 'order' with DboSource::expression + */ + public function testOrderWithDbExpressions() { + $this->loadFixtures('User'); + + $User = new User(); + + $results = $User->find('all', array( + 'fields' => array('id'), + 'recursive' => -1, + 'order' => $this->db->expression('CASE id WHEN 4 THEN 0 ELSE id END'), + )); + + $expected = array( + array( + 'User' => array('id' => 4), + ), + array( + 'User' => array('id' => 1), + ), + array( + 'User' => array('id' => 2), + ), + array( + 'User' => array('id' => 3), + ), + ); + + $this->assertEquals($expected, $results); + } + /** * testFindMagic method *