Как установить сортировку в функции хранилища по умолчанию в Typo3? - PullRequest
0 голосов
/ 17 мая 2018

Я написал так

/**
 * itemRepository
 *
 * @var \KRT\KrtEmployee\Domain\Repository\ItemRepository
 * @inject
 */
 protected $itemRepository = null;

/**
 * action list
 *
 * @return void
 */
public function listAction()
{
    $arguments =$this->request->getArguments();     

    $employees = $this->itemRepository->findAll();        
    $this->view->assign('employees',$employees);
}

В моих $ сотрудников результат у меня есть

  • ID сотрудника (UID по умолчанию)
  • Имя
  • Обозначение
  • Отдел
  • Зарплата

Теперь, как мне отсортировать массив результатов в порядке по возрастанию на основе

  1. Имя
  2. Отдел и зарплата

Есть ли какая-либо функция по умолчанию для сортировки внутри запросов к хранилищу?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Каждый репозиторий имеет свойство $defaultOrderings, где вы можете указать порядок по умолчанию, применяемый ко всем методам запросов.В вашем случае это может выглядеть так:

protected $defaultOrderings = [
    'name' => QueryInterface::ORDER_ASCENDING,
    'department.name' => QueryInterface::ORDER_ASCENDING,
    'salary' => QueryInterface::ORDER_ASCENDING,
];

Как вы можете видеть с department.name, вы также можете сортировать по свойствам отношений.Обратите внимание, что это работает только для отношений 1: 1 и n: 1.

В случае пользовательских методов запроса в вашем хранилище вы можете вручную установить порядок непосредственно в запросе:

$query->setOrderings([
    'name' => QueryInterface::ORDER_ASCENDING,
    'department.name' => QueryInterface::ORDER_ASCENDING,
    'salary' => QueryInterface::ORDER_ASCENDING,
]);
0 голосов
/ 17 мая 2018

У вас есть несколько вариантов в зависимости от того, чего вы хотите достичь:

Установка порядка по умолчанию для всего хранилища

Добавьте следующее в свой класс репозитория

protected $defaultOrderings =
    array(
        'department' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
        'salary' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
    );

Это будет применяться ко всем запросам, сделанным в этом хранилище.

см .: https://wiki.typo3.org/Default_Orderings_and_Query_Settings_in_Repository

Установка порядка для одного запроса

Добавьте это к запросу, который вы определили в своем хранилище

$query->setOrderings(
    array(
        'department' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
        'salary' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
    )
);

Таким образом, вы могли бы (и должны были) реализовать разные методы доступа для каждого порядка сортировки, который вы хотели бы получить.

см .: https://docs.typo3.org/typo3cms/ExtbaseFluidBook/6-Persistence/3-implement-individual-database-queries.html

Сортировать результат

Вы всегда можете использовать методы сортировки PHP, чтобы отсортировать результат запроса (возможно, преобразовав его в массив с ->toArray() первым.

...