2017-01-25 8 views
0

テーブルUserGroupの間に多対多の関係があります。グループの中には、そのタイプに基づいてユーザーに自動的に割り当てられるものがあります。他のグループは、ユーザー編集フォームを使用して管理者が管理できます。Symfony:EntityTypeフィールドの表示された関係のみを変更する

アドミニストレーターは、想定されるグループのみを管理できるように、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(); 

そして今、あなたは二つの配列する$ user->グループと$群間の差を確認することができます:あなたが提出された情報を取得するフォーム検証の後 。

+0

それはかなり大したことですが、それは完全に正常に動作します。ありがとう! –

関連する問題