簡體   English   中英

教義2在PreFlush中獲取相關實體

[英]doctrine 2 get related entities in PreFlush

有以下實體: ZoneZoneRecord

ZoneRecord有一個方法validate()來對所有相關Zone其他ZoneRecord進行驗證。

現在,我要檢查/驗證每個ZoneRecord (已經保存的文檔加上其被添加的那些Zone->addRecord(ZoneRecord)上運行時),這是關系到Zone ,如果Zone被保存。

現在,我有一個PreFlush Lifecyclecallback ZoneRecord->validate ,在其中觸發this->getZone->getRecords()此方法僅給我提供了db中已保存的實體

如何獲取Zone所有相關實體(從數據庫保存並動態添加)?

希望我的問題很清楚。

問題似乎出在教義內部。 我使用InheritanceType“ JOINED”

Zone的注釋如下所示:

/**
 * @var ZoneRecord[]
 * @ORM\OneToMany(targetEntity="Application\Entity\ZoneRecord", mappedBy="zone", cascade={"all"}, orphanRemoval=true)
 */
protected $records;

/**
 * @var ZoneRecordA[]
 * @ORM\OneToMany(targetEntity="Application\Entity\ZoneRecordA", mappedBy="zone", cascade={"all"}, orphanRemoval=true)
 */
protected $recordsa;

ZoneRecord的注釋:

/** 
 * @ORM\Entity
 * @ORM\Table(name="zonerecords")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({
 *  "A" = "Application\Entity\ZoneRecordA"
 * })
 * @ORM\HasLifecycleCallbacks
 */
abstract class ZoneRecord

ZoneRecordA的注釋:

/**
 * 
 * @ORM\Entity
 * @ORM\Table(name="zonerecords_a")
 *
 */
class ZoneRecordA extends ZoneRecord

如果我通過Zone->addRecordA(ZoneRecord) / Zone->removeRecordA(ZoneRecord)Zone添加或刪除ZoneRecord ,它將僅從protected $recordsa; 堆。 protected $records; 在實體成功刷新並重新加載之前,將保持不變。

盡管Doctrine被標記為JOINED,並且ZoneRecordA擴展了ZoneRecord ,但Doctrine在ZoneRecordZoneRecordA之間確實在內部有所不同。

如果要刪除記錄,這尤其是個問題-現在,我要同時使用兩種刪除方法( Zone->removeRecord(ZoneRecordA)Zone->removeRecordA(ZoneRecordA) )來確保從EntityManager中刪除實體。

如果通過addRecord()addRecordA()將實體添加到Zone ,也會將它們用作不同的集合,直到刷新並重新加載它們時,也會發生這種奇怪的行為。

聖誕快樂 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM