我正在运行一个批处理过程,该过程需要一个数组并通过学说添加新的entites循环。
由于数组的大小,我发现我需要使用$em->clear()
即使我使用$em->clear('my/entity')
,我也会遇到以下问题:
A new entity was found through the relationship
我已将其追溯到我需要清除的实体上的听众。
如何清除也有听众的学说中的实体?
我也试过$em->detach()
没有运气
目前的解决方案:
$this->em->persist($product);
$this->em->flush();
$this->em->clear(get_class($product));
答案 0 :(得分:0)
我提出的解决方案:
伪代码:
foreach ($this->recordBlocks as $recordBlock) {
$this->getExtraEntities();
$this->importRecords($progress, $recordBlock);
$this->em->clear();
}
如果你在不同的方法中有持久化和刷新,那么clear不会影响听众。
所以,我做了什么:
像往常一样询问我与其他实体经理的记录
但是,而不是将整个查询结果传递给importRecords
方法,
我只通过了一个小块(大约10条记录),当它完成后,我在我的实体经理上运行了一个明确的。
然后我从getExtraEntites
方法获得了我需要的其他一些实体,这些实体是明确的。
一旦刷新实体的方法返回,我就会设置清晰的方法 (所以我分批跑,否则记忆会爆炸)
我在这里提出我的解决方案,但我不相信这是最好的解决方案,所以不会接受它...