2017-01-25 49 views
0

我在表UserGroup之間具有多對多關係。一些組將根據其類型自動分配給用戶。其他組可以由管理員使用用戶編輯表單進行管理。Symfony:只更改顯示的實體類型字段的關係

爲了實現管理員只能管理應該設置的組,我使用了EntityType表單類型的query_builder選項。現在,高達

$builde->add('groups', EntityType::class, [ 
    // ... 
    'query_builder' => function (EntityRepository $er) { 
     return $er->createQueryBuilder('g') 
        ->where('g.type = ?1') 
        ->setParameter(1, 'user_managed'); 
    }, 
    'multiple' => true, 
    // ... 
]); 

我的問題是,只保存表單中選定的組關聯到用戶的用戶的實體,那麼這是不顯示被刪除的所有關聯。

有沒有辦法改變所顯示的組與用戶的關聯而不是所有的關聯?

感謝

回答

1

您可以使用您的類型映射選項,以不直接映射對象的信息:

$builder->add('groups', EntityType::class, [ 
    // ... 
    'query_builder' => function (EntityRepository $er) { 
     return $er->createQueryBuilder('g') 
        ->where('g.type = ?1') 
        ->setParameter(1, 'user_managed'); 
    }, 
    'multiple' => true, 
    // ... 
    'mapped' => false 
]); 

那般的信息不覆蓋組屬性您目的。 表單驗證後,你提交的信息:

$groups = $form->get("group")->getData(); 

現在你可以檢查$用戶>組和$組的兩個陣列之間的差異。

+0

這是一個很大的交易,但它工作得很好。謝謝! –