Php 从表单创建连接实体
我有三个实体,Php 从表单创建连接实体,php,symfony,Php,Symfony,我有三个实体,User、Provider和UserProvider(一个包含一些额外数据的连接实体) 我正在尝试创建一个表单,其中用户通过勾选框指定其提供者(这将生成一些UserProvider记录) 我尝试过使用选项并生成新的表单类型,但似乎无法使其正常工作。这是我最后一次尝试: $form = $this->createFormBuilder($user) ->add('userProviders', 'entity', array( 'class' =&
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
;
},
));
摘自这里:
你可以在里面做任何你想做的事情,即使是两个查询可能的
,而不是在情况下。作为一个解决方案,我只是创建了一个未绑定的表单,列出提供者
,并将它们与当前的用户
作为用户提供者
一起保存
这并不理想,因为重新访问表单将不会显示现有的联接实体(UserProvider
),并且需要进行额外的工作才能使这些实体可见。谢谢,但是,由于当前没有UserProvider
s,将查询什么?您想查询希望用户从中选择的提供者。这与您在OP中获取UserProvider
数组时使用的查询差不多。查询需要返回一个UserProvider
集,该集与Provider
不同UserProvider
是连接实体。这个数组是由我在当前Provider
对象上循环,并创建UserProvider
对象和当前User
s id组成的,提供了可能的选择。然后将您的类型用作服务,注入您需要的存储库,并在存储库中执行所有的单连接和其他查询。通过这种方式,您应该能够获得所需的一切,就在昨天,我在querybuilder中对两个表和两个子查询进行了查询连接。