在查询生成器中返回唯一的结果

时间:2018-10-23 09:02:47

标签: symfony doctrine dql

我有一个用于表单字段的查询构建器,因此它必须返回查询构建器的实例。当前,某些结果是彼此重复的,只有很小的差异。我只想显示基于特定列fileName/qf.fileName的唯一结果。

我目前有:

'query_builder' => function (EntityRepository $repository) use ($options) {
    return $repository
        ->createQueryBuilder('qf')
        ->join('qf.quote', 'q', Expr\Join::WITH, 'q.client = :client')
        ->setParameter('client', '3');
},

,并且我希望结果基于列qf.fileName是唯一的。我尝试使用distinct,但我相信您需要选择一个不适用于我的特定列,因为我想返回整个实体。

我也尝试了分组方式,但出现以下错误:

  

GROUP BY子句,包含非聚合列

任何帮助都会很棒,谢谢。

忽略硬编码的客户端!

编辑:

因此该属性在实体上不存在,被用于在表单上显示现有数据,因此我们利用了by_reference属性。

提供给前端的数据是从查询生成器生成的。

->add('example', EntityType::class, [
   'class' => Example::class,
   'multiple' => true,
   'required' => false,
   'by_reference' => false,
   'expanded' => true,
   'query_builder' => function (EntityRepository $repository) use ($client) {
        return $repository
            ->createQueryBuilder('ex')
            ->join('ex.quote', 'e', Expr\Join::WITH, 'e.client = :client')
            ->setParameter('client', $client->getId());
    },
]);

1 个答案:

答案 0 :(得分:0)

这将不起作用,因为无法从汇总结果集中为实体充水。您需要回退到扩展ChoiceType的自定义类型,并使用自定义DataTransformer在提交表单后重新获取选定的实体。