【问题标题】:Sonata Admin Bundle: sort by count one to many relationSonata Admin Bundle:按计数一对多关系排序
【发布时间】: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' => [],
            ]
        );
}

【问题讨论】:

    标签: symfony sonata-admin sonata symfony-sonata


    【解决方案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。
    猜你喜欢
    • 2019-04-12
    • 2013-06-04
    • 2012-07-05
    • 2016-09-03
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-20
    • 2015-08-12
    相关资源
    最近更新 更多