У меня есть построитель форм, где я генерирую выбор. В этом элементе я должен вынуть элементы, которые уже существуют в базе данных. Для этого я создаю построитель запросов. Теперь в этом построителе запросов я хочу сделать JOIN
, чтобы получить одну строку из таблицы языков для определенного языка. Проблема заключается в том, что после того, как я добавил этот JOIN
Symfony возвращает ошибку доступа:Form Builder с Query Builder не может получить доступ к свойству на Join
Error: Cannot access private property XXX\DatabaseBundle\Entity\AttributeGroupLanguage::$id
Вот что я делаю:
$builder->add('attributeGroups', 'entity', array(
'class' => 'XXX\DatabaseBundle\Entity\AttributeGroup',
'choice_label' => 'name',
'query_builder' => function(EntityRepository $er) use ($existingAttributeGroups) {
return $er->createQueryBuilder('ag')
->addSelect('agl')
->join('XXXDatabaseBundle:AttributeGroupLanguage agl', 'WITH agl.attributeGroup = ag.id')
->where('ag.id NOT IN (:existingAttributeGroups)')
->andWhere('agl.language = :languageId')
->setParameters(
array(
'existingAttributeGroups' => ($existingAttributeGroups) ?: '',
'languageId' => 1 //german
)
);
},
'attr' => array(
'class' => 'attributeGroupsList',
'style' => 'width: 250px'
)
));
Рассматривая сообщение об ошибке, вероятно, вы должны добавить метод getter к атрибутуGroupLanguage для свойства $ id. –