2012-03-19 18 views
0

我有一個表格來創建一個新的BroadcastMessage實體,我需要顯示一個<select multiple="multiple">類型的部件,綁定到excludedUsers屬性,與Doctrine2沒有直接關係表單構件未綁定到Doctrine2關聯?

裏面我BroadcastMessageType類(從AbstractType繼承):

$builder->add('excludedUsers, 'entity', array(
    'class' => 'Acme\MyBundle\Enrity\User', 
    'property' => 'username', 
    'multiple' => true 
)); 

這當然適用於創建新BroadcastMessage;但在editAction我需要一個複雜的查詢來排除用戶。我需要計算排除的用戶在名爲broadcast_message_reference的交叉引用表中查找記錄。

我的問題相當簡單:從哪裏才能得到正確綁定到<select multiple="multiple">部件excludedUsers屬性添加這種「複雜的查詢」?在我的getExludedUsers方法裏面?如果是,我該如何訪問該查詢的實體存儲庫?

class BroadcastMessage 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    private excludedUsers; 

    public function __costrunct() 
    { 
     $this->excludedUsers = new ArrayCollection(); 
    } 

    public function addExcludedUser(Acme\MyBundle\Enrity\User $user) 
    { 
     $this->excludedUsers[] = $user; 
     return $this; 
    } 

    public function getExcludedUsers() { return $this->excludedUsers; } 
} 

回答

0

事實上,我認爲,你需要你的表單項定義中query_builder選項:

$builder->add('excludedUsers', 'entity', array(
    'class' => 'Acme\MyBundle\Enrity\User', 
    'property' => 'username', 
    'multiple' => true, 
    'query_builder' => function(EntityManager $em){ 
     // you have an instance of EntityManager so you may build 
     // arbitrary QueryBuilder. Just remember to return it 
     // for example: 

     $qb = $em->createQueryBuilder() 
        ->from('Acme\MyBundle\Enrity\User u') 
        ->where('u.excluded = true'); 
     return $qb; 
    }, 
    'property' => 'username' 
)); 

這只是粗略的例子,但你可以找到更多關於實體的形式類型here

0

我認爲你的問題可以通過Form events來解決。爲EventSubscriber類創建服務,注入EntityManager,然後訂閱FormEvents::SET_DATA事件。