mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #9147 from webbuilders-group/sort-order-fix
BUGFIX: Fixed issue where multiple relationship sort order columns would be lost in favor of only the last relationship column in the sort order
This commit is contained in:
commit
2e2c56249e
@ -403,7 +403,7 @@ class DataQuery
|
||||
// Find the first free "_SortColumnX" slot
|
||||
// and assign it to $key
|
||||
$i = 0;
|
||||
while (isset($orderby[$key = "\"_SortColumn$i\""])) {
|
||||
while (isset($newOrderby[$key = "\"_SortColumn$i\""]) || isset($orderby[$key = "\"_SortColumn$i\""])) {
|
||||
++$i;
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,8 @@ class DataQueryTest extends SapphireTest
|
||||
DataQueryTest\ObjectE::class,
|
||||
DataQueryTest\ObjectF::class,
|
||||
DataQueryTest\ObjectG::class,
|
||||
DataQueryTest\ObjectH::class,
|
||||
DataQueryTest\ObjectI::class,
|
||||
SQLSelectTest\TestObject::class,
|
||||
SQLSelectTest\TestBase::class,
|
||||
SQLSelectTest\TestChild::class,
|
||||
@ -405,4 +407,25 @@ class DataQueryTest extends SapphireTest
|
||||
$this->assertEquals('Last', $second['Title']);
|
||||
$this->assertEmpty(array_shift($arrayResult));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that sorting against multiple relationships is working
|
||||
*/
|
||||
public function testMultipleRelationSort()
|
||||
{
|
||||
$query = new DataQuery(DataQueryTest\ObjectH::class);
|
||||
$query->applyRelation('ManyTestEs');
|
||||
$query->applyRelation('ManyTestIs');
|
||||
$query->sort([
|
||||
'"manytestes_DataQueryTest_E"."SortOrder"',
|
||||
'"manytestis_DataQueryTest_I"."SortOrder"',
|
||||
'"SortOrder"',
|
||||
]);
|
||||
|
||||
$titles = $query->column('Name');
|
||||
|
||||
$this->assertEquals('First', $titles[0]);
|
||||
$this->assertEquals('Second', $titles[1]);
|
||||
$this->assertEquals('Last', $titles[2]);
|
||||
}
|
||||
}
|
||||
|
@ -8,3 +8,31 @@ SilverStripe\ORM\Tests\DataQueryTest\ObjectE:
|
||||
query3:
|
||||
Title: 'Second'
|
||||
SortOrder: 2
|
||||
|
||||
SilverStripe\ORM\Tests\DataQueryTest\ObjectI:
|
||||
query1:
|
||||
Title: 'First'
|
||||
SortOrder: 1
|
||||
query2:
|
||||
Title: 'Second'
|
||||
SortOrder: 2
|
||||
query3:
|
||||
Title: 'Last'
|
||||
SortOrder: 3
|
||||
|
||||
SilverStripe\ORM\Tests\DataQueryTest\ObjectH:
|
||||
query1:
|
||||
Name: 'First'
|
||||
SortOrder: 3
|
||||
ManyTestEs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectE.query2
|
||||
ManyTestIs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectI.query2
|
||||
query2:
|
||||
Name: 'Last'
|
||||
SortOrder: 1
|
||||
ManyTestEs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectE.query1
|
||||
ManyTestIs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectI.query1
|
||||
query3:
|
||||
Name: 'Second'
|
||||
SortOrder: 2
|
||||
ManyTestEs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectE.query2
|
||||
ManyTestIs: =>SilverStripe\ORM\Tests\DataQueryTest\ObjectI.query3
|
||||
|
21
tests/php/ORM/DataQueryTest/ObjectH.php
Normal file
21
tests/php/ORM/DataQueryTest/ObjectH.php
Normal file
@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\ORM\Tests\DataQueryTest;
|
||||
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
class ObjectH extends DataObject implements TestOnly
|
||||
{
|
||||
private static $table_name = 'DataQueryTest_H';
|
||||
|
||||
private static $db = array(
|
||||
'Name' => 'Varchar',
|
||||
'SortOrder' => 'Int',
|
||||
);
|
||||
|
||||
private static $many_many = array(
|
||||
'ManyTestEs' => ObjectE::class,
|
||||
'ManyTestIs' => ObjectI::class,
|
||||
);
|
||||
}
|
16
tests/php/ORM/DataQueryTest/ObjectI.php
Normal file
16
tests/php/ORM/DataQueryTest/ObjectI.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\ORM\Tests\DataQueryTest;
|
||||
|
||||
use SilverStripe\Dev\TestOnly;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
class ObjectI extends DataObject implements TestOnly
|
||||
{
|
||||
private static $table_name = 'DataQueryTest_I';
|
||||
|
||||
private static $db = array(
|
||||
'Name' => 'Varchar',
|
||||
'SortOrder' => 'Int',
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue
Block a user