【问题标题】:Symfony Form not saving data in many to many AssociationSymfony 表单没有在多对多关联中保存数据
【发布时间】:2016-05-03 09:19:35
【问题描述】:

我在实体之间有以下关联。

用户

    /**
     * @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 表中,但不是其所有者在 user_companies 表中。

【问题讨论】:

    标签: php doctrine-orm symfony-forms symfony


    【解决方案1】:

    这是因为您没有将新的Company 实体添加到User 的集合$company。在您的控制器中添加$this->getUser()->addCompany($company);,这应该可以解决问题。您也可以在 setOwner 中自动执行此操作。

    【讨论】:

    • em 试图查询以加载用户拥有的所有公司列表。我有这个查询,但它没有用。 ` $repository = $em->getRepository('ApplicationSonataUserBundle:User'); $query = $repository->createQueryBuilder('u') ->innerJoin('u.company', 'companies') ->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());
    【解决方案2】:

    我想你在这种情况下使用了错误的实体之间的关联。而不是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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      相关资源
      最近更新 更多