Php 带有查询生成器的表单生成器无法访问联接的属性

Php 带有查询生成器的表单生成器无法访问联接的属性,php,mysql,symfony,symfony-forms,Php,Mysql,Symfony,Symfony Forms,我有一个表单生成器,在其中生成一个选择选项。在这个选择中,我必须取出数据库中已经存在的元素。为此,我创建了一个查询生成器。 现在,在这个查询生成器中,我想创建一个连接,从语言表中获取特定语言的一行。 问题是,在我添加此JOINsymfony后,它返回一个访问错误: 错误:无法访问私有属性 XXX\DatabaseBundle\Entity\AttributeGroup语言::$id 以下是我的工作: $builder->add('attributeGroups', 'entity', ar

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

错误:无法访问私有属性 XXX\DatabaseBundle\Entity\AttributeGroup语言::$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'
    )
));
将public getId()方法添加到AttributeGroupLanguage实体

public function getId(){
    return $this->id;
}
将public getId()方法添加到AttributeGroupLanguage实体

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

查看报告的错误,您可能应该为$id属性的AttributeGroupLanguage添加一个getter方法。查看报告的错误,您可能应该为$id属性的AttributeGroupLanguage添加一个getter方法。我已将所有getter和setter设置为CoreCtlyn,但答案不正确,我会做什么:我倾向于尽可能避免使用“实体”类型。我使模型和存储库逻辑远离用户界面(表示)层。我会将其设置为“选择”类型,并添加检索和格式化数据以提供“选择”选项的服务方法。我最终创建了一个新函数,不再使用实体,而是简单的选择,该函数的结果就是选择数组。还在等待也许有人知道在这里该做什么…我有所有的getter和setter设置coretlyn不是正确的答案,但是,我会做什么:我倾向于尽可能避免使用“实体”类型。我使模型和存储库逻辑远离用户界面(表示)层。我会将其设置为“选择”类型,并添加检索和格式化数据以提供“选择”选项的服务方法。我最终创建了一个新函数,不再使用实体,而是简单的选择,该函数的结果就是选择数组。还在等也许有人知道该怎么做。。。