2

我正在尝试使用 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
  Rider1
    Horse1
    Horse2
  Rider2
    Horse3
  Rider3
    Horse1
    Horse4

我得到了这个:

Stable
  Rider1
    Horse1
    Horse4
  Rider2
    Horse1
    Horse4
  Rider3
    Horse1
    Horse4

什么是完全错误的。正如我之前所说,在使用 Stdlib\ObjectProperty hydrator 时,我得到的对象关系与给定数据中的对象关系相同。任何人都知道如何解决这个问题?

4

1 回答 1

2

解决了。

DoctrineModule 文档 说:

不应交换教义集合。

事实证明,要正确补充嵌套集合,您必须交换它们:

Class Rider
{
    // model properties

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

    // other getters and setters
}
于 2013-08-17T14:17:26.883 回答