我在entites之间有以下关联。
用户:
/**
* @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'));
}
公司保存在公司表中,但不是user_companies
表中的所有者。
答案 0 :(得分:3)
这是因为您没有将新的Company
实体添加到$company
的集合User
中。在你的控制器中添加$this->getUser()->addCompany($company);
,这应该可以解决问题。您也可以在setOwner
内自动执行此操作。
答案 1 :(得分:1)
我认为你在这种情况下使用了实体之间的错误关联。您应该使用Many-To-Many
One-To-Many
/**
* @ORM\ManyToOne(targetEntity="Esec\CompanyBundle\Entity\Company", inversedBy="owner")
*/
private $company;
/**
* @ORM\OneToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", mappedBy="company")
*/
private $owner;