Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony:仅更改EntityType字段的显示关系_Php_Forms_Symfony - Fatal编程技术网

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

Php Symfony:仅更改EntityType字段的显示关系,php,forms,symfony,Php,Forms,Symfony,我在表用户和组之间建立了多对多关系。某些组会根据用户的类型自动分配给用户。其他组可以由管理员使用用户编辑表单进行管理 为了实现管理员只能管理应该管理的组,我使用EntityType表单类型的query\u builder选项 $builde->add('groups', EntityType::class, [ // ... 'query_builder' => function (EntityRepository $er) { return $er-

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

为了实现管理员只能管理应该管理的组,我使用EntityType表单类型的query\u 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,
    // ...
]);
现在我的问题是,在保存用户实体时,只有在表单中选择的组与用户关联,并且删除了所有未显示的关联

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


谢谢

为了不直接映射对象中的信息,您可以在类型中使用“映射”选项:

$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之间的差异

这样做很重要,但效果非常好。谢谢