gpt4 book ai didi

Symfony2 - 学说批处理

转载 作者:行者123 更新时间:2023-12-04 08:50:13 25 4
gpt4 key购买 nike

我有以下情况:

我需要基于一对实体创建大量实体(实体 C)

  • 实体 A (45)
  • 实体 B (700000+)
  • 实体 C (45 x 700000)
  • 实体 D

  • 所以我决定做以下事情:
    $AEntities = $em->getRepository('MyBundle:EntityA')->findAll();
    $DEntity = $em->getRepository('MyBundle:EntityD')->findOneBy($params);

    $iterableResult = $em->getRepository('MyBundle:EntityB')
    ->createQueryBuilder('b')
    ->getQuery()->iterate();
    $batchSize = 50

    while (($row = $iterableResult->next()) !== false) {
    foreach($AEntities as $AEntity) {
    $entity = new Entity\EntityC();
    $entity->setEntityD($DEntity);
    $entity->setEntityB($row[0]);
    $entity->setEntityA($AEntity);
    $em->persist($entity);
    }

    if(($i % $batchSize) == 0){
    $em->flush();
    $em->clear();
    }
    $em->detach($row[0]);
    $i++;
    }

    $em->flush();

    我按照 doctrine2-batch-processing 的说明进行操作

    但是当我执行 $em->detach($row[0]);并刷新得到错误通过关系找到了新实体...

    我试过没有 $em->detach($row[0]);但是这种高内存消耗

    我需要 : 就是释放每个Entity B的内存,使用后,但同时每次flush或者分组而不是一个一个,清空所有Entity C

    最佳答案

    调用 clear() on entity manager分离所有对象(默认情况下)。顺便说一句,您可以传递实体名称以分离给定类型的实体:

    $em->clear('EntityB'); 
    $em->clear('EntityC');

    我认为你试图分离已经分离的实体,因此它被视为新的。

    尝试删除 clear()称呼。您也可以尝试删除 detach()来电咨询 clear()在选定的实体上。

    关于Symfony2 - 学说批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540697/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com