我有三个实体,User
、Provider
和UserProvider
(一个带有一些额外数据的联接实体)。
我正在尝试创建一个表单,其中用户通过勾选框来指定他们的提供者(这应该会生成一些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
),并且需要做额外的工作才能使这些实体可见。