使用查询生成器的表单生成器无法访问Join上的属性

时间:2015-09-15 10:09:26

标签: php mysql symfony symfony-forms

我有一个表单构建器,我在其中生成一个select选项。在这个选择中,我必须取出数据库中已存在的元素。为此,我正在创建一个查询构建器。 现在,在这个查询构建器中,我想创建一个JOIN来从特定语言的语言表中获取单行。 问题是,在我添加此JOIN后,symfony会返回一个访问错误:

  

错误:无法访问私有财产   XXX \ DatabaseBundle \实体\ 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'
    )
));

1 个答案:

答案 0 :(得分:0)

将public getId()方法添加到AttributeGroupLanguage实体。

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