1

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

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

我正在尝试使用内置实体字段类型来完成此操作。我的问题是,当 Symfony 呈现该字段时,用户可以选择任何部门,而不仅仅是属于该用户公司的部门。

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

4

1 回答 1

2

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

    $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
                     ));
         }
    ));
于 2012-10-05T05:27:15.507 回答