如何在Typo3中设置默认存储库功能的排序?

时间:2018-05-17 08:05:55

标签: php typo3 typo3-7.6.x typo3-8.x typo3-extensions

我写得像这样

/**
 * 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)
  • 姓名
  • 指定
  • 部门
  • 薪酬

现在,我如何根据

升序顺序对结果数组进行排序
  1. 姓名
  2. 部门和薪水
  3. 是否有任何默认函数可以对存储库查询进行排序?

2 个答案:

答案 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
    )
);

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

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

对结果进行排序

您始终可以使用PHP排序方法对查询结果进行排序(可能首先将其转换为->toArray()的数组。