Symfony Form 不在多对多关联中保存数据
Symfony Form not saving data in many to many Association
实体之间有以下关联。
用户:
/**
* @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'));
}
公司已保存在公司 table 中,但其所有者未保存在 user_companies
table。
这是因为您没有将新的 Company
实体添加到 User
的集合 $company
中。在您的控制器中添加 $this->getUser()->addCompany($company);
,这应该可以解决问题。您也可以在 setOwner
.
中自动执行此操作
我想你在那种情况下使用了错误的实体之间的关联。您应该使用 One-To-Many
而不是 Many-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;
实体之间有以下关联。
用户:
/**
* @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'));
}
公司已保存在公司 table 中,但其所有者未保存在 user_companies
table。
这是因为您没有将新的 Company
实体添加到 User
的集合 $company
中。在您的控制器中添加 $this->getUser()->addCompany($company);
,这应该可以解决问题。您也可以在 setOwner
.
我想你在那种情况下使用了错误的实体之间的关联。您应该使用 One-To-Many
Many-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;