如何在 Typo3 的默认存储库功能中设置排序?
How to set sorting in default repository function in 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);
}
在我的 $employees 结果中我有
- 员工 ID(默认 uid)
- 姓名
- 指定
- 部门
- 工资
现在,我如何根据
以 升序 顺序对结果数组进行排序
- 姓名
- 部门及薪资
是否有任何默认函数可以在存储库查询中进行排序?
根据您想要实现的目标,您有多种选择:
为整个存储库设置默认顺序
将以下内容添加到您的存储库 class
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()
数组。
每个存储库都有一个 $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,
]);
总体和完整:
<?php
namespace <yourVendor>\<yourExtensionkey>\Domain\Repository;
use TYPO3\CMS\Extbase\Persistence\Repository;
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
class <yourDomain>Repository extends \TYPO3\CMS\Extbase\Persistence\Repository {
protected $defaultOrderings = [
'<yourProperty1>' => QueryInterface::ORDER_ASCENDING,
'<yourProperty2>' => QueryInterface::ORDER_DESCENDING
];
}
中的进一步解释
我是这样写的
/**
* 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 结果中我有
- 员工 ID(默认 uid)
- 姓名
- 指定
- 部门
- 工资
现在,我如何根据
以 升序 顺序对结果数组进行排序- 姓名
- 部门及薪资
是否有任何默认函数可以在存储库查询中进行排序?
根据您想要实现的目标,您有多种选择:
为整个存储库设置默认顺序
将以下内容添加到您的存储库 class
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()
数组。
每个存储库都有一个 $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,
]);
总体和完整:
<?php
namespace <yourVendor>\<yourExtensionkey>\Domain\Repository;
use TYPO3\CMS\Extbase\Persistence\Repository;
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
class <yourDomain>Repository extends \TYPO3\CMS\Extbase\Persistence\Repository {
protected $defaultOrderings = [
'<yourProperty1>' => QueryInterface::ORDER_ASCENDING,
'<yourProperty2>' => QueryInterface::ORDER_DESCENDING
];
}
中的进一步解释