Symfony2的形式QueryBuilder的与参数(symfony2 form querybui

2019-07-05 02:15发布

我想把我的实体在查询生成器的功能:

->add( 'weeks', 'entity', array(
    'class' => 'MV\CaravanBundle\Entity\CaravanRow',
    'property' => 'line',
    'query_builder' => function(EntityRepository $er ) use ( $caravan ) {
        return $er->createQueryBuilder('w')
                  ->orderBy('w.dateFrom', 'ASC')
                  ->where('w.caravan = ?', $caravan )
                  ->andWhere('w.visible = 1')
                  ->andWhere('w.booked = 0');
}

但得到的消息:

不允许在这方面类型的表达式实体\名称“

那么,什么是(最佳)的方式来给QueryBuilder的信息。

Answer 1:

您需要单独设置参数,如下所示:

->add( 'weeks', 'entity', array(
    'class' => 'MV\CaravanBundle\Entity\CaravanRow',
    'property' => 'line',
    'query_builder' => function(EntityRepository $er ) use ( $caravan ) {
        return $er->createQueryBuilder('w')
                  ->orderBy('w.dateFrom', 'ASC')
                  ->where('w.caravan = ?1')
                  ->andWhere('w.visible = 1')
                  ->andWhere('w.booked = 0')
                  ->setParameter(1, $caravan);
}

您可以使用一个整数或字符串,但语法是为每个略有不同。 请参阅该文档



Answer 2:

我最近在几乎同样的问题跑了。 唯一的区别是“query_builder”选项里面“setDefaultOptions”进行设置。 Basicly形式设立这样的:

$builder->add('field', 'query_type', array('id' => 1));

该“QUERY_TYPE”类看起来是这样的:

class QueryType extends AbstractType
{
     public function setDefaultOptions(OptionsResolverInterface $options)
     {
              $resolver->setRequired(array('id'));

              $resolver->setNormalizers(array(
                  'query_builder' => function (Options $options, $configs) {
                          return function (EntityRepository $er) use ( $options ) {
                              return $er->getSomething( $options['id'] );

                       };
                  },
              ));
     }
}

我用的是setNormalizers函数来访问我的$ options数组,并从那里我可以调用与参数QueryBuilder的。

希望这是有用的人!



文章来源: symfony2 form querybuilder with parameters