Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从表单创建连接实体_Php_Symfony - Fatal编程技术网

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中对两个表和两个子查询进行了查询连接。