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())代码>