如何在 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 结果中我有

现在,我如何根据

升序 顺序对结果数组进行排序
  1. 姓名
  2. 部门及薪资

是否有任何默认函数可以在存储库查询中进行排序?

根据您想要实现的目标,您有多种选择:

为整个存储库设置默认顺序

将以下内容添加到您的存储库 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
    )
);

通过这种方式,您可以(并且必须)为您希望返回的每个排序顺序实施不同的访问方法。

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

对结果进行排序

您可以随时使用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
    ];
}

docs.typo3.org

中的进一步解释