有以下实体:Zone
,ZoneRecord
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保存并动态添加)?
希望我的问题很清楚......
答案 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
/ Zone
从Zone->addRecordA(ZoneRecord)
添加或删除Zone->removeRecordA(ZoneRecord)
,则只会从protected $recordsa;
堆栈中删除protected $records;
。 <{1}}将不受影响,直到成功刷新并重新加载实体。
似乎Doctrine在ZoneRecord
和ZoneRecordA
之间的内部区别不同,尽管它们标记为已加入,而ZoneRecordA
扩展为ZoneRecord
。
如果您要删除记录,这尤其是一个问题 - 现在我同时使用删除方法(Zone->removeRecord(ZoneRecordA)
和Zone->removeRecordA(ZoneRecordA)
)来确保从EntityManager中删除实体。
如果您通过Zone
或addRecord()
向addRecordA()
添加实体,也会出现这种奇怪的行为,它们会被用作不同的集合,直到它们被刷新并重新加载。
圣诞快乐:)