configureListFields

时间:2015-10-23 01:24:31

标签: php symfony sonata-admin

我被困在这几个小时。

我有管理类列出所有类别,在一个表列中有相关产品(产品实体):Table example 相关代码:

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
            ->addIdentifier('name')
            ->add('products') // Entity Product, @ORM\OneToMany
            ->add('ord')
    ;
}

我需要做的是隐藏非活动产品,而不是基于"(布尔)product.active"但我无法弄清楚。我知道" createQuery"方法,但它不起作用。当我生成SQL并直接运行查询时它可以正常工作,但在这里看起来我只能使用ProxyQuery过滤类别,然后在单独的查询中查询所有产品(这个单独的查询我不知道如何更改)。

public function createQuery($context = 'list')
{
    $query = parent::createQuery($context);

    $q = new ProxyQuery($query->join(sprintf('%s.products', $query->getRootAlias()), 'p')
            ->andWhere('p.active = :act')->setParameter('act', true));

    return $q;
}

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您可以将字段类型更改为null或实体,并添加query_builder option以调整所使用的查询:

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('name')
        ->add('products', null, array(
            'query_builder' => function(EntityRepository $er) {
                 return $er->createQueryBuilder('qb')
                           ->leftjoin('qb.products', 'p')
                           ->where('p.active = :act')
                           ->setParameter('act', true)
             }
     ));
}

我没有用oneToMany关系测试它。

topic

中有一些信息