我被困在这几个小时。
我有管理类列出所有类别,在一个表列中有相关产品(产品实体):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;
}
感谢您的帮助
答案 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关系测试它。
中有一些信息