23

I want to put my entity in the function of the query builder:

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

but get the message:

Expression of type 'Entity\Name' not allowed in this context

So what is the (best) way to give the querybuilder information.

2 Answers 2

43

You should set the parameter separately like so:

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

You can either use an integer or string, but the syntax is slightly different for each. See the docs

Sign up to request clarification or add additional context in comments.

2 Comments

your link is died !
Can i Pass EnityManger Query instead of QueryBuider.? Does it works .?
15

I recently ran across almost the same problem. Only difference was the 'query_builder' option has to be set inside 'setDefaultOptions'. Basicly the form is created like this:

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

The 'query_type' class looks like this:

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'] );

                       };
                  },
              ));
     }
}

I use the setNormalizers function to access my $options array and from there on i can call the querybuilder with parameters.

Hope this is useful for someone!

1 Comment

Good solution if you need options in your anonymous function, when defining default options.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.