我有一个需要的脚本获取数据库中的条目列表,然后遍历那些在另一个表中创建新条目的脚本,如果它们不存在的话。使用原则2执行批量INSERT IGNORE的最有效方法
目前即时通讯做:
foreach($entries as $entry){
$newItem = new Item();
$newItem->setAttribute($entry->getAttribute());
$entityManager->persist($newItem);
try{
$entityManager->flush();
} catch(\Exception $e){
if(!strpos($e->getMessage(),'Duplicate')){
throw $e;
}
$entityManager = $this->getDoctrine()->getManager();
//refreshes the entity manager
}
}
但是做这种方式是非常耗费时间,也有条目1000的和脚本有时需要向上10分钟即可完成。我已经看到其他帖子建议,当做批处理这样的冲洗每20个左右记录的问题是,如果其中一个20是重复的,那么整个交易死亡,林不知道我将如何回去尝试和找到有问题的条目以在再次提交之前将其排除。
任何帮助,这将不胜感激。
不要'的flush()'你批'里面的foreach()'循环... –