如何创建一个Symfony2实体字段,从关系中获取实体列表?

时间:2012-10-05 02:23:37

标签: symfony symfony-forms doctrine-query

我有3个实体:公司,部门和用户 用户与公司有一对多的关系。 部门与公司和用户分开了多对一的关系

目标是让每个部门配置不同的部门,并且用户能够从属于他们公司的部门中选择(在他们的个人资料中)。

我正在尝试使用entity字段类型构建来完成此操作。我的问题是,当Symfony呈现该字段时,允许用户选择任何部门,而不仅仅是属于该用户公司的部门。

我试过了using a custom query,但是我收到一个错误,即$ company不存在(即使我在我的函数中有它)。我认为这是因为自定义查询在一个闭包中,它有自己的范围。

1 个答案:

答案 0 :(得分:2)

您使用自定义查询的建议是完全正确的。要在自定义查询范围内使用对象,必须使用 use 语句。 E.g:

    $company = $user->getCompany();

    $builder->add('department', 'entity', array(
        'class' => 'YourSpecialBundle:Department',
        'property' => 'name',
        'query_builder' => function(EntityRepository $er) use($company) {
             return $er->createQueryBuilder('r')
                     ->where('r.company = :company')
                     ->setParameter("company", $company);
         }
    ));

如果您需要定义多个过滤器:

    $company = $user->getCompany();

    $builder->add('department', 'entity', array(
        'class' => 'YourSpecialBundle:Department',
        'property' => 'name',
        'query_builder' => function(EntityRepository $er) use($company) {
             return $er->createQueryBuilder('r')
                     ->where('r.company = :company AND r.active = :active')
                     ->setParameter(array(
                            "company" => $company,
                            "active" => true
                     ));
         }
    ));