Давайте начнем с того, что EntityRepository
- это основной репозиторий Doctrine, который находится в Doctrine\ORM\EntityRepository;
пространстве имен.Я также сомневаюсь , что у вас есть еще EntityRepository
в вашем проекте.
Итак, первая ошибка в неправильной подсказке типа.Вы должны добавить use Doctrine\ORM\EntityRepository;
перед вашим контроллером.OptionsRepository
будет соответствовать этому определению, поскольку оно расширяет EntityRepository
, или, по крайней мере, оно должно .
Вторая ошибка ->setParameter(':id', $id)
- вы не можете установить хранилище как параметр запроса, он бесполезен.Я не знаю, что такое $id
, но, как и с любыми другими функциями обратного вызова, вы можете use
.
И в-третьих, как опция называется query_builder
- ваш обратный вызов должен вернуть QueryBuilder
, поэтому удалите ->getQuery()->execute();
.
В конце правильный код должен быть:
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);
};