doctrine 2获取PreFlush中的相关实体

时间:2015-12-10 13:50:11

标签: php doctrine-orm lifecycle

有以下实体:ZoneZoneRecord

ZoneRecord有一个方法validate(),可以针对相关ZoneRecord的所有其他Zone进行验证。

现在我要检查/验证每个ZoneRecord(已经保存的加上那些在运行时由Zone->addRecord(ZoneRecord)添加的那些)与之相关的Zone如果Zone被保存,则PreFlush

现在我有一个ZoneRecord->validate Lifecyclecallback this->getZone->getRecords(),我触发Zone此方法仅向我提供已保存的db 实体。< / p>

如何获取$.get('super-site.com/info', function(data) { data.each(function(item){ $('#theFormSelect').append('<option>' + item.text + '</option>'); }); }); 的所有相关实体(从DB保存并动态添加)?

希望我的问题很清楚......

1 个答案:

答案 0 :(得分:0)

问题似乎出现在Doctrine内部。 我使用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

如果我通过ZoneRecord / ZoneZone->addRecordA(ZoneRecord)添加或删除Zone->removeRecordA(ZoneRecord),则只会从protected $recordsa;堆栈中删除protected $records;。 <{1}}将不受影响,直到成功刷新并重新加载实体。

似乎Doctrine在ZoneRecordZoneRecordA之间的内部区别不同,尽管它们标记为已加入,而ZoneRecordA扩展为ZoneRecord

如果您要删除记录,这尤其是一个问题 - 现在我同时使用删除方法(Zone->removeRecord(ZoneRecordA)Zone->removeRecordA(ZoneRecordA))来确保从EntityManager中删除实体。

如果您通过ZoneaddRecord()addRecordA()添加实体,也会出现这种奇怪的行为,它们会被用作不同的集合,直到它们被刷新并重新加载。

圣诞快乐:)