1
0
mirror of synced 2025-02-02 21:41:45 +03:00

merged git@github.com:SammyK/doctrine2.git:many-to-many-order-by-fix

This commit is contained in:
Jeremy Giberson 2016-02-10 19:52:03 -07:00
parent f0accca99d
commit 0adeade045
2 changed files with 58 additions and 0 deletions

View File

@ -278,6 +278,8 @@ class ManyToManyPersister extends AbstractCollectionPersister
. implode(' AND ', $onConditions)
. ' WHERE ' . implode(' AND ', $whereClauses);
$sql .= $this->getOrderingSql($criteria);
$stmt = $this->conn->executeQuery($sql, $params);
return $this
@ -740,4 +742,22 @@ class ManyToManyPersister extends AbstractCollectionPersister
return $types;
}
/**
* @param Criteria $criteria
* @return string
*/
private function getOrderingSql(Criteria $criteria)
{
$orderings = $criteria->getOrderings();
if ($orderings) {
$orderBy = [];
foreach ($orderings as $field => $direction) {
$orderBy[] = $field . ' ' . $direction;
}
return ' ORDER BY ' . implode(', ', $orderBy);
}
return '';
}
}

View File

@ -377,6 +377,44 @@ class ManyToManyBasicAssociationTest extends \Doctrine\Tests\OrmFunctionalTestCa
$this->assertEquals(0, count($user->groups));
}
/**
* @group DDC-3952
*/
public function testManyToManyOrderByIsNotIgnored()
{
$user = $this->addCmsUserGblancoWithGroups(1);
$group = new CmsGroup;
$group->name = 'C';
$user->addGroup($group);
$group = new CmsGroup;
$group->name = 'A';
$user->addGroup($group);
$group = new CmsGroup;
$group->name = 'B';
$user->addGroup($group);
$this->_em->persist($user);
$this->_em->flush();
$this->_em->clear();
$user = $this->_em->find(get_class($user), $user->id);
$criteria = Criteria::create()
->orderBy(['name' => Criteria::ASC]);
$groups = $user->getGroups()->matching($criteria);
$existingOrder = [];
foreach ($groups as $group) {
$existingOrder[] = $group->getName();
}
$this->assertEquals(['A', 'B', 'C', 'Developers_0'], $existingOrder);
}
public function testMatching()
{
$user = $this->addCmsUserGblancoWithGroups(2);