Symfony Form不会在多对多的Association中保存数据

时间:2016-05-03 09:19:35

标签: php doctrine-orm symfony-forms symfony

我在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表中的所有者。

2 个答案:

答案 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;