2015-09-15 15 views
1

У меня есть построитель форм, где я генерирую выбор. В этом элементе я должен вынуть элементы, которые уже существуют в базе данных. Для этого я создаю построитель запросов. Теперь в этом построителе запросов я хочу сделать 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' 
    ) 
)); 
+0

Рассматривая сообщение об ошибке, вероятно, вы должны добавить метод getter к атрибутуGroupLanguage для свойства $ id. –

ответ

0

Добавить общественный GetId (метод к AttributeGroupLanguage сущности).

public function getId(){ 
    return $this->id; 
} 
+0

У меня есть все геттеры и сеттер, установленные правильно –

+0

Не правильный ответ, но, что бы я сделал: я стараюсь избегать как можно большего использования типа «сущность». Я сохраняю логику модели и репозиториев от уровня пользовательского интерфейса (презентации). Я бы сделал это «выбор», и я бы добавил метод сервиса, который извлекает и форматирует данные для предоставления опции «выбора». –

+0

Я в конечном итоге создаю новую функцию и больше не использую объект, но простой выбор, а результатом функции является массив выбора. Все еще жду, может быть, у кого-то есть идея, что делать здесь ... –