有2个数据库的Symfony表单

时间:2019-07-01 13:58:04

标签: php forms symfony phpstorm

我在互联网上找不到真正的案例,因此决定写自己的问题。

我有一个创建Member对象的表单。该成员对象具有对应用程序对象的引用。两者都保存在2个不同的数据库中。

仅当我编辑并填写表单时,创建成员对象才是问题,我是否遇到错误->

  

“应用程序”类型的实体   传递给选择字段的内容必须进行管理。也许你忘记了   将其保存在实体管理器中

这是我的表格代码

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('membberName', null, array('label' => false))
        ->add('memberDescription', TextareaType::class, array('label' => false))
        ->add('memberVisible', null, array('label' => false))
        ->add('memberApp', EntityType::class, [
            'label' => false,
            'class' => Application::class,
            'choice_label' => function (Application $application) {
                return sprintf('(%d) %s', $application->getAppId(), $application->getAppurlUrl());
            },
            'choices' => $this->applicationRepository->getAll(),

        ])
        ->add('Save', SubmitType::class, [
            'attr' => ['class' => 'create-button']
        ]);

}

我发现了很多有关此问题的案例,但没有一个可以帮助我。 仅当我在自己的数据库之外加载与另一个实体相关的实体时,才会遇到此问题。

总结:调用创建视图页面并按提交作品。 调用编辑视图会导致上述问题。

我是否需要定义或配置任何内容,以便我的表单可以正确加载?

1 个答案:

答案 0 :(得分:0)

尝试为第二个数据库实体管理器的选项中的实体表单字段em设置自定义memberApp

如文档中所述:https://symfony.com/doc/current/reference/forms/types/entity.html#em

  

em类型:字符串| Doctrine \ Common \ Persistence \ ObjectManager默认:   默认的实体管理器

     

如果指定,此实体管理器将用于加载选择   而不是默认的实体管理器。

另一种方法可能是为此字段设置['mapped' => false]并使用控制器或服务中正确的数据库em手动处理刷新