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



>我有 3 个实体:公司、部门和用户用户与公司有一对多关系。部门与公司和用户建立了独立的多对一关系

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

我正在尝试使用实体字段类型的构建来实现这一点。我的问题是,当Symfony渲染字段时,允许用户选择任何部门,而不仅仅是属于该用户公司的部门。

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

您使用自定义查询的建议是完全正确的。若要在自定义查询范围内使用对象,必须使用 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
                     ));
         }
    ));

最新更新