orderById param

This commit is contained in:
Yuri Kuznetsov
2020-03-02 12:04:06 +02:00
parent c1b1eaf847
commit 83fd96a876
2 changed files with 23 additions and 11 deletions
+22 -10
View File
@@ -163,7 +163,7 @@ class Base
$desc = $desc === strtolower('desc');
}
if (!empty($sortBy)) {
if ($sortBy) {
$result['orderBy'] = $sortBy;
$type = $this->getMetadata()->get(['entityDefs', $this->getEntityType(), 'fields', $sortBy, 'type']);
if (in_array($type, ['link', 'file', 'image', 'linkOne'])) {
@@ -171,13 +171,11 @@ class Base
} else if ($type === 'linkParent') {
$result['orderBy'] .= 'Type';
} else if ($type === 'address') {
if (!$desc) {
$orderPart = 'ASC';
} else {
$orderPart = 'DESC';
}
$result['orderBy'] = [[$sortBy . 'Country', $orderPart], [$sortBy . 'City', $orderPart], [$sortBy . 'Street', $orderPart]];
return;
$result['orderBy'] = [
[$sortBy . 'Country', $desc],
[$sortBy . 'City', $desc],
[$sortBy . 'Street', $desc],
];
} else if ($type === 'enum') {
$list = $this->getMetadata()->get(['entityDefs', $this->getEntityType(), 'fields', $sortBy, 'options']);
if ($list && is_array($list) && count($list)) {
@@ -190,8 +188,7 @@ class Base
foreach ($list as $i => $listItem) {
$list[$i] = str_replace(',', '_COMMA_', $listItem);
}
$result['orderBy'] = 'LIST:' . $sortBy . ':' . implode(',', $list);
return;
$result['orderBy'] = [['LIST:' . $sortBy . ':' . implode(',', $list)]];
}
} else {
if (strpos($sortBy, '.') === false && strpos($sortBy, ':') === false) {
@@ -200,7 +197,22 @@ class Base
}
}
}
if (!is_array($result['orderBy'])) {
$result['orderBy'] = [[$result['orderBy'], $desc]];
}
if (
$this->getMetadata()->get(['entityDefs', $this->getEntityType(), 'fields', $sortBy, 'orderById'])
&&
$this->getSeed()->hasAttribute('id')
) {
$result['orderBy'][] = ['id', $desc];
}
return;
}
if (!$desc) {
$result['order'] = 'ASC';
} else {
@@ -221,7 +221,7 @@ class BaseTest extends \PHPUnit\Framework\TestCase
$this->assertEquals(2, $selectParams['whereClause'][0]['int=']);
$this->assertEquals(5, $selectParams['offset']);
$this->assertEquals(10, $selectParams['limit']);
$this->assertEquals('name', $selectParams['orderBy']);
$this->assertEquals([['name', false]], $selectParams['orderBy']);
$this->assertEquals('2016-10-10', $selectParams['whereClause'][1]['OR'][0]['date=']);
$this->assertEquals('2016-10-10 10:10:00', $selectParams['whereClause'][1]['OR'][1]['dateTime>']);