2012-10-05 53 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 
        )); 
     } 
    ));