实体字段类型中的自定义查询

rep*_*cln 9 entity dql symfony

我用这样的实体类型构建一个表单:

$form = $this->createFormBuilder()
->add('users', 'entity', array(
    'class' => 'UserBundle:Users',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('u')
                          ->orderBy('u.name', 'ASC');
                        },)
      )
->getForm();
Run Code Online (Sandbox Code Playgroud)

现在我想修改此表单,仅显示不同的用户.我试试这个:

->add('users', 'entity', array(
                        'class' => 'UserBundle:Users',
                        'query_builder' => function(EntityRepository $er) {
                        return $er->createQuery('SELECT DISTINCT u.name FROM UserBundle:Users ORDER BY u.name ASC')->getResult();
                        },)
                      )
Run Code Online (Sandbox Code Playgroud)

但是Symfony给了我一个例外.我的问题是如何在实体字段类型中使用自定义查询?


我不明白你的意思是什么意思.我的代码看起来像:

库:

public function getDistinctUsers()
{
    return $this->getEntityManager()->createQuery('SELECT DISTINCT u.name FROM UserBundle:Users u ORDER BY u.name DESC')->getResult();
}
Run Code Online (Sandbox Code Playgroud)

控制器:

->add('users', 'entity', array(
    'class' => 'UserBundle:Users',
    'query_builder' => function(EntityRepository $er) {
            return $er->getDistinctUsers();
         },)
      )
Run Code Online (Sandbox Code Playgroud)

枝条:

<form action="{{ path('user') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

并且它抛出一个异常:在渲染模板期间抛出了一个异常("预期参数类型为"Doctrine\ORM\QueryBuilder","数组"给出了")...

Ser*_*rgi 13

最简单的方法是在查询中添加group by:

$form = $this->createFormBuilder()
  ->add('users', 'entity', array(
    'class' => 'UserBundle:Users',
    'query_builder' => function(EntityRepository $er) {
      return $er->createQueryBuilder('u')
                ->groupBy('u.id')
                ->orderBy('u.name', 'ASC');
      },)
    )
->getForm();
Run Code Online (Sandbox Code Playgroud)