0

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

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

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

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

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

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

4

2 回答 2

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 次查询。

于 2013-02-09T11:54:40.677 回答
0

作为对此的解决方案,我刚刚创建了一个未绑定的表单列表Providers并将它们与当前User的 as一起保存UserProviders

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

于 2013-02-11T12:43:53.863 回答