2012-10-05 4 views
1

회사, 부서 및 사용자가 3 개 있습니다. 사용자가 회사와 일대일로 많은 관계를 맺고 있습니다. 부서는 회사 및 사용자와 다 대일 관계가 있습니다.관계에서 엔티티 목록을 가져 오는 Symfony2 엔티티 필드를 만들려면 어떻게해야합니까?

목표는 각 부서가 서로 다른 부서를 구성하고 사용자가 자신의 회사에 속한 부서에서 (프로필에서) 선택할 수 있도록하는 것입니다.

필드 유형이 entity 인 빌드로이 작업을 수행하려고합니다. 내 문제는 Symfony가 필드를 렌더링 할 때 사용자는 해당 사용자 회사에 속한 부서뿐만 아니라 모든 부서를 선택할 수 있다는 것입니다.

나는 using a custom query을 시도했지만 $ company는 존재하지 않는다는 오류가 발생합니다. 내 생각 엔 사용자 지정 쿼리가 자체 범위가있는 클로저에 있기 때문입니다.

답변

2

사용자 지정 쿼리를 사용하라는 제안은 완전히 옳았습니다. 사용자 지정 쿼리의 범위에서 개체를 사용하려면 문을 사용해야합니다. 예컨대 : 여러 개의 필터를 정의 할 필요가있는 경우

$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 
        )); 
     } 
    ));