【问题标题】:Symfony Form Error: "Expected argument of type "Doctrine\ORM\QueryBuilder", "Doctrine\ORM\Query" given"Symfony 表单错误:“类型为“Doctrine\ORM\QueryBuilder”的预期参数,给出了“Doctrine\ORM\Query””
【发布时间】:2016-02-22 15:06:49
【问题描述】:

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

我的控制器:

// 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. 
  }
}

我的车型:

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

My Car Entity

Full Stack Trace

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

Symfony 版本:2.7

【问题讨论】:

  • 删除 getQuery() 并可能将 $query 更改为 $qb 只是为了清楚地表明您正在处理查询构建器对象而不是查询对象。两种截然不同的东西。 symfony.com/doc/current/reference/forms/types/…。你可能会得到一个不同的错误。不确定 distinct 会对您的查询产生什么影响。一定要试试看。
  • 删除->getQuery()。没有它,您将返回查询构建器,并使用它返回一个查询对象。您也可以删除$query = ,因为它从未如此冗余。

标签: php symfony orm doctrine-orm


【解决方案1】:

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
                }

【讨论】:

  • 还有对 $query 变量的赋值
  • 我现在得到一个不同的错误:警告:spl_object_hash() 期望参数 1 是对象,给定字符串
  • 好的,您能否更新您的帖子并复制完整的跟踪信息,以便准确了解何时引发此错误以及该字符串是什么?
  • 是的,因为我想创建动态下拉菜单,而“makename”是第一个下拉选项,我认为它现在可以工作了……我删除了“select”并添加了“choice_label”$builder->add('makename', 'entity', array( 'class' => 'MyTestBundle:Car\CarModel', 'choice_label'=>'makename', 'query_builder' => function (EntityRepository $er) { return $qb = $er->createQueryBuilder('s') ->GroupBy('s.makename') ->orderBy('s.makename','ASC'); } ));
  • 我还必须从 distinct() 更改为 GroupBy() 并让它工作......谢谢:)
猜你喜欢
  • 1970-01-01
  • 2017-04-11
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-26
  • 2016-05-20
  • 1970-01-01
相关资源
最近更新 更多