[英]Doctrine / DQL get the entities having the exactly the same related entities
[英]doctrine 2 get related entities in PreFlush
有以下實體: Zone
, ZoneRecord
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在ZoneRecord
和ZoneRecordA
之間確實在內部有所不同。
如果要刪除記錄,這尤其是個問題-現在,我要同時使用兩種刪除方法( Zone->removeRecord(ZoneRecordA)
和Zone->removeRecordA(ZoneRecordA)
)來確保從EntityManager中刪除實體。
如果通過addRecord()
或addRecordA()
將實體添加到Zone
,也會將它們用作不同的集合,直到刷新並重新加載它們時,也會發生這種奇怪的行為。
聖誕快樂 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.