Sonata Admin Bundle:按计数一对多关系排序

Posted

技术标签:

【中文标题】Sonata Admin Bundle:按计数一对多关系排序【英文标题】:Sonata Admin Bundle: sort by count one to many relation 【发布时间】:2020-04-10 20:38:18 【问题描述】:

如何在后台添加按票数排序?

我有一个与一对多投票相关的提名实体。 我需要允许按被提名者的票数排序。

我从这里尝试一个解决方案: https://github.com/sonata-project/SonataAdminBundle/issues/1077 首先在这里: Sonata Admin Bundle: show total count of collection on list view

但我收到错误消息: [语义错误] 第 0 行,第 184 列靠近“v_id_count ASC”:错误:未定义“v_id_count”。

这是来自 NomineeAdmin 的代码:

public function createQuery($context = 'list')

    $query = parent::createQuery($context);

    if ('list' === $context) 
        $parameters = $this->getFilterParameters();

        if ('getVotesCount' === $parameters['_sort_by']) 
            $rootAlias = $query->getRootAliases()[0];

            $query
                ->addSelect('COUNT(v.id) as v_id_count')
                ->leftJoin($rootAlias . '. votes', 'v')
                ->groupBy($rootAlias . '.id')
                ->orderBy('v_id_count', $parameters['_sort_order']);

        
    

    return $query;


protected function configureListFields(ListMapper $listMapper)

    $listMapper
        //...
        ->add(
            'getVotesCount',
            null,
            [
                'sortable'                         => true,
                'sort_field_mapping'               => ['fieldName' => 'id'],
                'sort_parent_association_mappings' => [],
            ]
        );

【问题讨论】:

【参考方案1】:

您是否尝试在实体中添加 getter 方法以返回关系数并将其用作 sort_field_mapping ?

getVotesNumber(): int  ... 

...

'sort_field_mapping' => ['fieldName' => 'votesNumber'],

我没有尝试过,但它应该可以工作(这样你就不必发出 sql 请求)

【讨论】:

这不起作用。在这种情况下,我收到一个错误:类型错误:传递给 Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery::entityJoin() 的参数 1 必须是数组类型,给定 null,在 /var/www/symfony/vendor/sonata- 中调用project/doctrine-orm-admin-bundle/Datagrid/ProxyQuery.php 在第 143 行 这可能是因为 Symfony 尝试映射元素,你可以使用symfony.com/doc/current/reference/forms/types/form.html#mappedfalse。

以上是关于Sonata Admin Bundle:按计数一对多关系排序的主要内容,如果未能解决你的问题,请参考以下文章

Sonata mongodb admin bundle filter by reference

Sonata Admin Bundle + Sonata User Bundle:覆盖登录表单

Sonata Media Bundle 与 Sonata Admin Bundle 3.0(或 2.4)

Sonata Admin Bundle - 自定义模板

sonata-project/user-bundle dev-master 与 sonata-project/doctrine-orm-admin-bundle 冲突

Sonata admin-bundle - 没有注销导航栏