【问题标题】:symfony2 form querybuilder with parameters带参数的 symfony2 表单查询构建器
【发布时间】:2012-11-30 13:59: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');
}

但得到消息:

在此上下文中不允许使用“实体\名称”类型的表达式

那么提供查询构建器信息的(最佳)方式是什么。

【问题讨论】:

    标签: forms symfony builder query-builder


    【解决方案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);
    }
    

    您可以使用整数或字符串,但语法略有不同。见the docs

    【讨论】:

    • 你的链接失效了!
    • 我可以通过 EnityManger 查询而不是 QueryBuider。?行得通吗?
    【解决方案2】:

    我最近遇到了几乎相同的问题。唯一的区别是必须在“setDefaultOptions”中设置“query_builder”选项。 基本上表单是这样创建的:

    $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 数组,然后我可以从那里调用带有参数的查询构建器。

    希望这对某人有用!

    【讨论】:

    • 在定义默认选项时,如果您需要匿名函数中的选项,这是一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多