Issue
I have difficulties with the use of the query builder in Symfony. Like this, my select box lists all data that is stored in my entity "Options":
$options['class'] = Options::class;
$options['choice_label'] = function ($value) {
return $value->getName();
};
$formBuilder->add($name, $class, $options);
But I want to filter the data, so that the options show only the data that is connected to a specific id of my entity "Fields".
This is my approach with query builder:
$options['class'] = Options::class;
$options['choice_label'] = 'id';
$options['query_builder'] = function (EntityRepository $id) {
return $this->createQueryBuilder('f')
->leftJoin('f.fields', 'fi')
->where(":id MEMBER OF f.fields")
->setParameter(':id', $id)
->getQuery()
->execute();
};
The error message I get is:
Argument 1 passed to App\Controller\PagesController::App\Controller{closure}() must be an instance of App\Controller\EntityRepository, instance of App\Repository\OptionsRepository given, called in /Users/work/project/vendor/symfony/doctrine-bridge/Form/Type/EntityType.php on line 32
Solution
Let's start with fact that EntityRepository
is core Doctrine repository that is under
Doctrine\ORM\EntityRepository;
namespace. I also doubt that you have another EntityRepository
in your project.
So, first error is in incorrect type hint. You should add use Doctrine\ORM\EntityRepository;
before your controller. OptionsRepository
will fit this definition as it extends EntityRepository
, or at least, it should.
Second error is ->setParameter(':id', $id)
- you cannot set repository as parameter of a query, it's useless. I don't know what is $id
but as with any other callback functions, you can use
it.
And third, as option is named query_builder
- your callback should return QueryBuilder
, so remove ->getQuery()->execute();
.
In the end the proper code should be:
use Doctrine\ORM\EntityRepository;
//....
$options['query_builder'] = function (EntityRepository $er) use ($id) {
return $er->createQueryBuilder('f')
->leftJoin('f.fields', 'fi')
->where(":id MEMBER OF f.fields")
->setParameter(':id', $id);
};
Answered By - u_mulder Answer Checked By - Marilyn (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.