Browse Source

Postgres and SQL Server require an order clause for subqueries having a distinct

Jose Lorenzo Rodriguez 11 years ago
parent
commit
1748bb79cb

+ 11 - 1
src/ORM/Association/SelectableAssociationTrait.php

@@ -240,7 +240,17 @@ trait SelectableAssociationTrait
         }
 
         $fields = $query->aliasFields($keys, $this->source()->alias());
-        return $filterQuery->select($fields, true)->distinct();
+        $filterQuery->select($fields, true)->distinct();
+
+        $order = $filterQuery->clause('order');
+        if ($order) {
+            $order->iterateParts(function ($dir, $field) use ($filterQuery) {
+                $filterQuery->select(is_int($field) ? $dir : $field);
+                return $dir;
+            });
+        }
+
+        return $filterQuery;
     }
 
     /**

+ 1 - 0
tests/TestCase/ORM/QueryRegressionTest.php

@@ -754,6 +754,7 @@ class QueryRegressionTest extends TestCase
             ->matching('Users', function ($q) {
                 return $q->where(['Users.id >=' => 1]);
             })
+            ->order(['Comments.id' => 'ASC'])
             ->first();
         $this->assertInstanceOf('Cake\ORM\Entity', $result->article);
         $this->assertInstanceOf('Cake\ORM\Entity', $result->user);