Symfony 表单错误:“给出了类型为“Doctrine\ORM\QueryBuilder”、“Doctrine\ORM\Query”的预期参数”

gab*_*ahn 2 php orm symfony doctrine-orm

我在控制器中有两个表单,第一个表单工作正常,但是我的第二个表单无法按预期工作。

我的控制器:

// Second Form
$formTwo = $this->get('form.factory')->createNamedBuilder('form2name', new CarType(), null, array())
        ->getForm();

if('POST' === $request->getMethod()) {

if ($request->request->has('form1name')) {
    // handle the first form  
}

if ($request->request->has('form2name')) {
    // handle the second form 
    // get the id value of the selected value. 
  }
}
Run Code Online (Sandbox Code Playgroud)

我的车型:

public function buildForm(FormBuilderInterface $builder, array $options){

   $builder->add('makename','entity',array(
                    'class'=> 'MyTestBundle:Car\CarModel',
                    'query_builder'=>function(EntityRepository $er){
                        return $query = $er->createQueryBuilder('s')
                                    ->select('s.makename')
                                    ->distinct()
                                    ->orderBy('s.makename','ASC');
                }

   ));
  $builder->add('search','submit',array());
}
Run Code Online (Sandbox Code Playgroud)

我的汽车实体

完整的堆栈跟踪

错误:“给出了类型为“Doctrine\ORM\QueryBuilder”、“Doctrine\ORM\Query”的预期参数”

交响乐版本:2.7

Del*_*ine 5

query_builder(用于构建表单)中,您必须返回一个QueryBuilder对象。目前,您返回一个Query对象。

只需删除getQuery()

 $builder->add('makename','entity',array(
                    'class'=> 'MyTestBundle:Car\CarModel',
                    'query_builder'=>function(EntityRepository $er){
                        return $er->createQueryBuilder('s')
                                    ->select('s.makename')
                                    ->distinct()
                                    //->getQuery(); remove this line
                }
Run Code Online (Sandbox Code Playgroud)

  • 我还必须从 `distinct() ` 更改为 `GroupBy() ` 并让它工作......谢谢:) (2认同)