![](/img/trans.png)
[英]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.