Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.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 Symfony表单未在多对多关联中保存数据_Php_Doctrine Orm_Symfony Forms_Symfony - Fatal编程技术网

Php Symfony表单未在多对多关联中保存数据

Php Symfony表单未在多对多关联中保存数据,php,doctrine-orm,symfony-forms,symfony,Php,Doctrine Orm,Symfony Forms,Symfony,我有以下实体之间的关联 用户: /** * @ORM\ManyToMany(targetEntity="Esec\CompanyBundle\Entity\Company", inversedBy="owner") * @ORM\JoinTable(name="users_companies", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},

我有以下实体之间的关联

用户

    /**
     * @ORM\ManyToMany(targetEntity="Esec\CompanyBundle\Entity\Company", inversedBy="owner")
     * @ORM\JoinTable(name="users_companies",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")}
     *      )
     */
    private $company;
   /**
     * @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="company",)
     */
    private $owner;

公司

    /**
     * @ORM\ManyToMany(targetEntity="Esec\CompanyBundle\Entity\Company", inversedBy="owner")
     * @ORM\JoinTable(name="users_companies",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")}
     *      )
     */
    private $company;
   /**
     * @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="company",)
     */
    private $owner;
有一个表单
CompanyType
用于创建公司,并设置其当前登录的所有者。 我是在提交表格后才这样做的

 if ($form->isSubmitted() && $form->isValid()) {
                            $company->setOwner($this->getUser());
                            $em->persist($company);
                            $em->flush();
                            return $this->redirect($this->generateUrl('esec_company_index'));
                        }

公司保存在公司表中,但不是其所有者保存在用户公司表中。

这是因为您没有将新的
公司
实体添加到
用户
的集合
$Company
。添加
$this->getUser()->addCompany($company)在你的控制器中,这样就可以了。您也可以在
setOwner
中自动执行此操作,我想您在这种情况下使用了错误的实体间关联。您应该使用
一对多
而不是
多对多

/**
 * @ORM\ManyToOne(targetEntity="Esec\CompanyBundle\Entity\Company", inversedBy="owner")
 */
private $company;


/**
 * @ORM\OneToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="company")
 */
private $owner;

em正在尝试查询以加载用户拥有的所有公司列表。我有这个问题,但没有用$repository=$em->getRepository('ApplicationSonataUserBundle:User')$query=$repository->createQueryBuilder('u')->innerJoin('u.company','companys')->where('u.id=:user')->setParameter('user',$this->getUser()->getId())->getQuery()`如果要查询公司,请获取公司存储库而不是用户存储库<代码>$em->getRepository('Company')->createQueryBuilder('c')->innerJoin('c.owner','owner')->where('owner.id=:user')->setParameter('user',$this->getUser())