Mit*_*oof 23 forms builder query-builder symfony
我想将我的实体放在查询生成器的函数中:
->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');
}
Run Code Online (Sandbox Code Playgroud)
但得到消息:
在此上下文中不允许表达"实体\名称"类型
那么提供querybuilder信息的(最佳)方法是什么呢?
Squ*_*zic 39
您应该单独设置参数,如下所示:
->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);
}
Run Code Online (Sandbox Code Playgroud)
您可以使用整数或字符串,但每种语法略有不同.查看文档
Sam*_*Sam 15
我最近遇到了几乎相同的问题.唯一的区别是'query_builder'选项必须在'setDefaultOptions'中设置.基本上,表单是这样创建的:
$builder->add('field', 'query_type', array('id' => 1));
Run Code Online (Sandbox Code Playgroud)
'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'] );
};
},
));
}
}
Run Code Online (Sandbox Code Playgroud)
我使用setNormalizers函数来访问我的$ options数组,从那里我可以用参数调用querybuilder.
希望这对某人有用!