Symfony3.4 - collection 引用相同的实体字段失去链接关联

Symfony3.4 - collection reference same entity field lose linked association

对不起标题,很难用几个词来形容它。问题是:

我有一个客户实体,它有一个带有 Website 和 customerTrackingIds 的 OneToMany :

class Customer {

    ...

    /**
     * @var ArrayCollection
     * @Serializer\Exclude()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\WebSite", mappedBy="customer",cascade={"persist","remove"},orphanRemoval=true)
    */
    private $webSites;


    /**
     * @var ArrayCollection
     * @Serializer\Exclude()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\CustomerTrackingId", mappedBy="customer",cascade={"persist","remove"})
     */
    private $customerTrackingIds;
    ...
}

和网站:

class WebSite {

   /**
    * @var Customer
    * @Serializer\MaxDepth(1)
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Customer", inversedBy="webSites")
    * @ORM\JoinColumn(nullable=true, onDelete="SET NULL")
    */
    private $customer;   


    /**
     * @var ArrayCollection
     * @Serializer\Exclude()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\CustomerTrackingId", mappedBy="website")
     */
    private $customerTrackingIds;
}

客户有多个网站和多个 trackingId。每个跟踪 ID 都与客户的一个网站相关联,但同一网站可以存在多个跟踪 ID。

我在同一页面中使用 https://github.com/ninsuo/symfony-collection 来处理 website/trackingIds 的 collection,但是当我去编辑信息时,发生了一些非常奇怪的事情(至少对我而言)。

查看我的调试器 session 我看到当表单从我的控制器中的提交加载数据时:

$formCustomer = $this->createForm( CustomerFormType::class, $customer );
    $formCustomer->handleRequest( $request );

    if ( $formCustomer->isSubmitted() && $formCustomer->isValid() ) {
        $em = $this->getDoctrine()->getManager();
        $em->persist( $customer );
        $em->flush();

处理请求后,TrackingIds 的所有元素都已正确设置其网站,但在网站内部,客户 link 迷路了(变为空)。 接下来发生的是,当所有数据都持久化时,我在数据库中丢失了网站 <-> 客户之间的物理关联(客户变为空)

我该如何解决这个问题?

如果您将登陆这里,我只需仔细检查我的网站集合表单类型就解决了这个问题。

自从使用 https://github.com/ninsuo/symfony-collection 以来,我创建了一个新的 FormTheme 来呈现我页面中的集合 add/delete 内容,只有一个字段用于网站集合,即网站 name.

无论如何,在我的网站集合 formType 中,我有两个字段,name 和,你猜怎么着,CUSTOMER.

由于 FormTheme 只呈现名称字段,另一个自动变为 null,所以当它由控制器处理时,他实际上做对了。