簡體   English   中英

Sonata Admin Bundle:按計數一對多關系排序

[英]Sonata Admin Bundle: sort by count one to many relation

如何在管理員中添加按票數排序?

我有一個與一對多投票相關的提名實體。 我需要允許按被提名者的票數排序。

我從這里嘗試一個解決方案:https ://github.com/sonata-project/SonataAdminBundle/issues/1077和首先在這里: Sonata Admin Bundle:在列表視圖中顯示集合的總數

但我收到錯誤消息:[語義錯誤] line 0, col 184 near 'v_id_count ASC,': Error: 'v_id_count' is not defined。

這是 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' => [],
            ]
        );
}

您是否嘗試在實體中添加 getter 方法以返回關系數並將其用作 sort_field_mapping ?

getVotesNumber(): int { ... }

...

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

我沒有試過,但它應該可以工作(這樣,你就不必發出 sql 請求)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM