У меня следующая ситуация:
Мне нужно создать большое количество сущностей (Entity C) на основе пары сущностей
- Объект А (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, после использования, но при этом каждый сброс или по группам а не по одному, и очистить все Entity C
$batchSize=50
, но это не очень хорошее число для меня - person rkmax   schedule 19.12.2011