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;