2012-02-18 65 views
0

我有67352行文件。一行是一个名字。我使用foreach在批处理中插入这些名称。在这些67352中,只有52262条记录在使用批量大小为100时被持久保存到数据库中。如果批量大小较高,则保留的文档较少,如果较低,则会有更多文档被保留,但我从未获取所有文档持续存在。doctrine odm批量插入 - 并非所有文档都保存

odm的版本是1.0.0beta3,我也试过这也与1.0.0rc1,具有相同的结果。

的代码如下所示:

$batchSize = 100; 
foreach ($data as $name) 
{ 
    $doc = new \SomeDocument; 
    $doc->setName($name); 

    $dm->persist($doc); 
    $i++; 

    if ($i % $batchSize == 0) 
    { 
     $dm->flush(); 
     $dm->clear(); 
    } 
} 
$dm->flush(); 

谁能告诉我有什么不对?谢谢

回答

1

你没有提到你正在使用的索引等,但让我们假设它是默认的,你没有遇到唯一性问题(特别是因为你的结果是可变的)。这听起来像你的一些写作失败/迷路。

尝试与运行批量插入:

$dm->flush(array('safe'=>true)); 

这将是一个有点慢,但至少,当你看到一个失败的它现在应该抛出一个异常,你可以把它从那里。