从窗体创建联接实体


Creating join entities from a form

我有三个实体,UserProviderUserProvider(一个带有一些额外数据的联接实体)。

我正在尝试创建一个表单,其中用户通过勾选框来指定他们的提供者(这应该会生成一些UserProvider记录)。

我尝试过使用选项并生成一个新的表单类型,但似乎无法正常工作。这是我最后一次尝试:

$form = $this->createFormBuilder($user)
    ->add('userProviders', 'entity', array(
        'class' => 'MyAppBundle:UserProvider',
        'property' => 'provider.name'
        'choices' => $userProviders
    ))
    ->getForm();

其中$userProviders是我生成的一些实体的数组,这些实体将当前用户映射到所有可能的提供者,但这不起作用,因为这些实体没有持久化(因为可能不需要它们)。

在Symfony,最干净的方法是什么?

只需使用实体表单类的内部方式生成数组,如下所示:

use Doctrine'ORM'EntityRepository;
// ...
$builder->add('userProviders', 'entity', array(
    'class' => 'MyAppBundle:UserProvider',
    'property' => 'provider.name'
    'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('u')
            //Your Query here
        ;
    },
));

取自此处:http://symfony.com/doc/master/reference/forms/types/entity.html

你可以在里面做任何你想做的事情,甚至可以查询两个可能的NOT IN案例。

作为解决方案,我刚刚创建了一个未绑定的表单,列出了Providers,并将它们与当前的User一起持久化为UserProviders

这并不理想,因为重新访问表单不会显示现有的联接实体(UserProvider),并且需要做额外的工作才能使这些实体可见。