DoctrineModule DoctrineObject hydrator - 正在覆盖嵌套集合

时间:2013-08-17 12:28:08

标签: php orm doctrine-orm zend-framework2

我正在尝试使用DoctrineModule DoctrineObject水合物来保湿3个实体。 我尝试用Stdlib \ ObjectProperty保湿剂做同样的事情,我得到了预期,正确的结果。

第一个实体:

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补水时:

Stable
  Rider1
    Horse1
    Horse2
  Rider2
    Horse3
  Rider3
    Horse1
    Horse4

我得到了这个:

Stable
  Rider1
    Horse1
    Horse4
  Rider2
    Horse1
    Horse4
  Rider3
    Horse1
    Horse4

什么是完全错误的。正如我之前所说的,当使用Stdlib \ ObjectProperty水化器时,我获得与给定数据中相同的对象关系。 谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

解决了它。

DoctrineModule docs说:

  

不应交换学说集合。

事实证明,为了让嵌套集合适当补充水分,你必须交换它们:

Class Rider
{
    // model properties

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

    // other getters and setters
}