实体字段类型中的自定义查询 [英] custom query in entity field type

查看:119
本文介绍了实体字段类型中的自定义查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I build a form with entity type like this:

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

现在,我想修改此表单,以仅显示不同的用户。我尝试这样做:

Now I want to modify this form, to show only distinct users. I try this:

->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();
                        },)
                      )

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

but Symfony throws me an exception. My question is how can I use custom query in entity field type?

我不明白您的意思是last回答。我的代码如下:

I don't understand what you mean with last answer. My code looks like:

存储库:

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

控制器:

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

嫩枝:

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

并引发异常:呈现模板时已引发异常(预期参数类型为 Doctrine\ORM\QueryBuilder,给出的数组)...

and it throws an exception: An exception has been thrown during the rendering of a template ("Expected argument of type "Doctrine\ORM\QueryBuilder", "array" given") ...

推荐答案

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

The easiest way is to add a group by in the query:

$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();

这篇关于实体字段类型中的自定义查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆