我在表格User
和Group
之间建立了多对多的关系。某些组根据其类型自动分配给用户。管理员可以使用用户编辑表单管理其他组。
为了实现管理员只能管理应该使用的组,我使用query_builder
表单类型的EntityType
选项。
$builde->add('groups', EntityType::class, [
// ...
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('g')
->where('g.type = ?1')
->setParameter(1, 'user_managed');
},
'multiple' => true,
// ...
]);
我现在的问题是,在保存用户实体时,只有在表单中选择的组与用户相关联,并且所有未显示的关联都将被删除。
有没有办法只更改显示的组与用户的关联,而不是所有的关联?
由于
答案 0 :(得分: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-> groups和$ groups之间的区别。