我有三个实体,User
,Provider
和UserProvider
(带有一些额外数据的连接实体)。
我正在尝试创建一个表单,用户通过勾选框来指定其提供者(这应该生成一些UserProvider
个记录)。
我尝试过使用选项并生成新的表单类型,但似乎无法使其正常工作。这是我尝试的最后一件事:
$form = $this->createFormBuilder($user)
->add('userProviders', 'entity', array(
'class' => 'MyAppBundle:UserProvider',
'property' => 'provider.name'
'choices' => $userProviders
))
->getForm();
其中$userProviders
是我生成的一些实体的数组,将当前用户映射到所有可能的提供者,但这不起作用,因为实体不是持久的(因为它们可能不需要)。
在Symfony中最干净的方法是什么?
答案 0 :(得分:1)
只需使用实体表单类的内部方式生成如下所示的数组:
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
个案件进行2次查询。
答案 1 :(得分:0)
作为解决方案,我刚创建了一个未绑定的表单Providers
,并将其与当前User
UserProviders
一起保留。
这并不理想,因为重新访问表单不会显示现有的联接实体(UserProvider
),并且需要额外的工作才能使这些实体可见。