Symfony:仅更改EntityType字段的显示关系

时间:2017-01-25 12:19:13

标签: php forms symfony

我在表格UserGroup之间建立了多对多的关系。某些组根据其类型自动分配给用户。管理员可以使用用户编辑表单管理其他组。

为了实现管理员只能管理应该使用的组,我使用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,
    // ...
]);

我现在的问题是,在保存用户实体时,只有在表单中选择的组与用户相关联,并且所有未显示的关联都将被删除。

有没有办法只更改显示的组与用户的关联,而不是所有的关联?

由于

1 个答案:

答案 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之间的区别。