Как установить сортировку в функции репозитория по умолчанию в Typo3?

Я написал так

/**
* 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. Отдел и Зарплата

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

0

Решение

Каждый репозиторий имеет $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,
]);
2

Другие решения

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

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

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

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() первый.

1

По вопросам рекламы [email protected]