我写得像这样
/**
* 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);
}
在 $ employees 结果中,我有
现在,我如何根据
以升序顺序对结果数组进行排序是否有任何默认函数可以对存储库查询进行排序?
答案 0 :(得分:3)
每个存储库都有一个protected $defaultOrderings = [
'name' => QueryInterface::ORDER_ASCENDING,
'department.name' => QueryInterface::ORDER_ASCENDING,
'salary' => QueryInterface::ORDER_ASCENDING,
];
属性,您可以在其中指定应用于所有查询方法的默认排序。在你的情况下,它可能看起来像这样:
department.name
正如您在$query->setOrderings([
'name' => QueryInterface::ORDER_ASCENDING,
'department.name' => QueryInterface::ORDER_ASCENDING,
'salary' => QueryInterface::ORDER_ASCENDING,
]);
中看到的那样,您也可以按关系属性进行排序。请注意,这仅适用于1:1和n:1关系。
如果您的存储库中有自定义查询方法,您可以直接在查询上手动设置排序:
appsettings.json
答案 1 :(得分: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
)
);
通过这种方式,您可以(并且必须)为您希望返回的每个排序顺序实现不同的访问方法。
对结果进行排序
您始终可以使用PHP排序方法对查询结果进行排序(可能首先将其转换为->toArray()
的数组。