【问题标题】:DoctrineModule DoctrineObject hydrator - nested collections are being overwrittenDoctrineModule DoctrineObject hydrator - 嵌套集合被覆盖
【发布时间】:2013-08-17 12:28:08
【问题描述】:

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

第一个实体:

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 时,我得到的对象关系与给定数据中的对象关系相同。 有谁知道如何解决这个问题?

【问题讨论】:

    标签: php orm doctrine-orm zend-framework2


    【解决方案1】:

    解决了。

    DoctrineModule 文档说:

    不应交换教义集合。

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

    Class Rider
    {
        // model properties
    
        public function addHorses($horses)
        {
            $this->horses = $horses;
        }
    
        // other getters and setters
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2017-04-27
      • 2015-11-22
      相关资源
      最近更新 更多