使用实体管理器clear()并且还有一个用于学说批处理的监听器

时间:2014-03-14 15:50:08

标签: php symfony doctrine-orm doctrine batch-processing

我正在运行一个批处理过程,该过程需要一个数组并通过学说添加新的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));

1 个答案:

答案 0 :(得分:0)

我提出的解决方案:

伪代码:

foreach ($this->recordBlocks as $recordBlock) {
    $this->getExtraEntities();
    $this->importRecords($progress, $recordBlock);
    $this->em->clear();
}

如果你在不同的方法中有持久化和刷新,那么clear不会影响听众。

所以,我做了什么:

像往常一样询问我与其他实体经理的记录 但是,而不是将整个查询结果传递给importRecords方法, 我只通过了一个小块(大约10条记录),当它完成后,我在我的实体经理上运行了一个明确的。

然后我从getExtraEntites方法获得了我需要的其他一些实体,这些实体是明确的。

一旦刷新实体的方法返回,我就会设置清晰的方法 (所以我分批跑,否则记忆会爆炸)


我在这里提出我的解决方案,但我不相信这是最好的解决方案,所以不会接受它...