2013-08-17 49 views
2

我正在嘗試使用DoctrineModule DoctrineObject水合物來水化3個實體。 我試圖用Stdlib \ ObjectProperty hydrator來做同樣的事情,並且我得到了預期的正確結果。DoctrineModule DoctrineObject水合物 - 嵌套集合被覆蓋

一是實體:

Class Stable 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Rider", mappedBy="stable", cascade={"persist"}) 
    */ 
    protected $riders; 
} 

二:

Class Rider 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Horse", mappedBy="rider", cascade={"persist"}) 
    */ 
    protected $horses; 
} 

三:

Class Horse 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Rider", inversedBy="horses") 
    * @ORM\JoinColumn(name="horse_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    protected $rider; 
} 

我中省略ID屬性,getter和setter。

當我水合物穩定帶以下數據:

Stable 
    Rider1 
    Horse1 
    Horse2 
    Rider2 
    Horse3 
    Rider3 
    Horse1 
    Horse4 

我得到這個代替:

Stable 
    Rider1 
    Horse1 
    Horse4 
    Rider2 
    Horse1 
    Horse4 
    Rider3 
    Horse1 
    Horse4 

什麼是完全錯誤的。正如我之前所說的,當使用Stdlib \ ObjectProperty hydrator時,我獲得了與給定數據中相同的對象關係。 任何人都知道如何解決這個問題?

回答

2

解決了它。

DoctrineModule文檔說:

主義藏品不應該被交換。

事實證明,得到嵌套集合適當補充水分,你必須交換他們:

Class Rider 
{ 
    // model properties 

    public function addHorses($horses) 
    { 
     $this->horses = $horses; 
    } 

    // other getters and setters 
}