如何在 formbuilder 中对 entityType 字段的 group_by 选项进行排序?

How can I sort group_by option for entityType field in formbuilder?

我将我的 $entity 输出与 frombuilder 分组:

$options['group_by'] = function ($entity) {
    if ($entity->getCategory() != null) {
        return $entity->getCategory()->getName();
    } else {
        return "all";
    }
};

这是我的下拉菜单的输出:

  colors
     blue
     red
     green
  all
     colors
     friends
  friends
     elephant
     monkey
     

但我喜欢按字母顺序排列的组。我期望的输出是:

all
     colors
     friends
colors
     blue
     red
     green
friends
     elephant
     monkey

我在文档中找不到执行此操作的任何提示 https://symfony.com/doc/current/reference/forms/types/entity.html#group-by 有机会吗?

您可以通过自定义 QueryBuilder 按组名对选项进行排序:

$builder->add('...', EntityType::class, [
    'class' => YourEntity::class,
    'query_builder' => function (EntityRepository $repository) {
        return $repository->createQueryBuilder('entity')
            ->leftJoin('entity.category', 'category')
            ->addSelect('CASE WHEN entity.category IS NULL THEN \'all\' ELSE category.name END AS HIDDEN category_name')
            ->orderBy('category_name', 'ASC')
            ->addOrderBy('entity.name', 'ASC');
    },
    'group_by' => ...,
]);

https://symfony.com/doc/current/reference/forms/types/entity.html#ref-form-entity-query-builder