【发布时间】:2017-01-20 09:02:29
【问题描述】:
我收到此错误:
[Symfony\Component\Debug\Exception\ContextErrorException] 注意:未定义索引:000000000fa82729000000006e17190b
我已经尝试了this post的所有提示。
我的代码比其他发帖者的代码简单多了(问这个问题)。
$em = $this->getContainer()->get('doctrine')->getManager();
$pictureUrlRepository = new ProductItemPictureUrlRepository($em);
$pictures = $pictureUrlRepository->findAll();
for ($i = 0; $i < 4; ++$i) {
$productItem = $pictures[$i]->getProductItem();
dump($productItem->getId());
$fileName = 'file_' . $i;
$productItemPicture = new ProductItemPicture();
$productItemPicture->setProductItem($productItem);
$productItemPicture->setFile($fileName);
$productItemPicture->setPosition(1);
$productItemPicture->setSize(1000);
$productItemPicture->setWidth(1200);
$productItemPicture->setHeight(1000);
$em->persist($productItemPicture);
$em->flush();
$em->clear();
unset($productItemPicture);
}
为了向您展示,我已经尝试了上面链接中的建议,这里是更复杂的代码以及已实现的提示(但结果仍然相同):
$em = $this->getContainer()->get('doctrine')->getManager();
$pictureUrlRepository = new ProductItemPictureUrlRepository($em);
$pictures = $pictureUrlRepository->findAll();
foreach ($em->getEventManager()->getListeners() as $event => $listeners) {
foreach ($listeners as $listener) {
$em->getEventManager()->removeEventListener($event, $listener);
}
}
$batchSize = 2;
for ($i = 0; $i < 4; ++$i) {
$productItem = $pictures[$i]->getProductItem();
dump($productItem->getId());
$fileName = 'file_' . $i;
$productItemPicture = new ProductItemPicture();
$productItemPicture->setProductItem($productItem);
$productItemPicture->setFile($fileName);
$productItemPicture->setPosition(1);
$productItemPicture->setSize(1000);
$productItemPicture->setWidth(1200);
$productItemPicture->setHeight(1000);
$productItemPicture->setCreated(new \DateTime('20.1.2017'));
$productItemPicture->setUpdated(new \DateTime('20.1.2017'));
$em->persist($productItemPicture);
if (($i % $batchSize) === 0) {
$em->flush();
$em->clear();
}
}
$em->flush();
$em->clear();
仅当我评论(禁用)$em->clear();行,它的工作原理。不运行 clear() 有什么问题? 在执行数千个数据库条目但不运行 clear() 时会发生什么?
【问题讨论】:
-
能否请您标记出此错误的“行”?也许来自你在循环之后执行的代码?
-
当我评论 $em->clear();有用。所以这是行。
-
你有多少张照片? 5?少一点?
-
也许,但您正在清除
EntityManager,如果您在循环后尝试更新其他实体,这将引发您提供的异常。 -
@Veve 我有数千张图片,但为了测试,我减少到 4 张,以表明它仍然会导致这个问题。涉及此问题的其他线程与内存泄漏有关,因此我将此测试缩减为 4,以触发此错误。
标签: php doctrine-orm symfony