在Symfony 3.4 Easy Admin软件包中显示大量实体的总数

时间:2018-12-17 13:03:12

标签: symfony symfony2-easyadmin easyadmin

我正在尝试显示实体列表视图的相关实体数,但是数量太多,因此它在实体中用完了内存(执行简单的count($this->relatedEntities))。

有人知道如何/在何处可以覆盖ListController的{​​{1}}来添加一个带有方括号的QueryBuilder列吗?

我尝试扩展COUNT()并连接到AdminController函数(以向每个对象手动添加计数),但这并没有给我实体列表,而是给了{{1} }对象。

1 个答案:

答案 0 :(得分:0)

这是我的固定方法:

在自定义AdminController中覆盖renderTemplate:

protected function renderTemplate($actionName, $templatePath, array $parameters = array())
{
    if ($actionName === 'list' && $this->entity['class'] === ClassA::class) {
        //piggyback on virtual property 'count'
        $parameters['fields']['count']['servicecounts'] = $this->MyEntityRepository->getCounts();
    }

    return $this->render($templatePath, $parameters);
}

easy_admin配置:

  list:
    fields:
    - { property: 'count', template: 'count.html.twig' }

count.html.twig:

{{ field_options.servicecounts[item.id] }}

getCounts函数:

public function getCounts()
{
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb
        ->select('s.id, count(ce.recordId)')
        ->from(ClassA::class, 's')
        ->leftJoin(ClassB::class, 'ce', Join::WITH, 's.id = ce.service')
        ->groupBy('s.id')
    ;

    $results = [];
    foreach ($qb->getQuery()->execute() as $row) {
        $results[$row['id']] = $row[1];
    }

    return $results;

}