我正在使用Doctrine作为主要任务应该将数据从CSV文件导入数据库的应用程序。至少有50,000个条目。 除了一件事,代码工作完美,检测未插入数据库的行。
if (($handle = fopen($rootPath, 'r')) !== FALSE) {
set_time_limit(0);
$tempObjets=array();
while (($row = fgetcsv($handle, 4096, ';')) !== FALSE) {
$iteration++;
$contactt = new Contact();
$option = array();
$optiondata = array();
$datacon = new Datacontact();
//precessing row data (read row and put the data into contact
$datacon->setContact($contactt);
$em->persist($datacon);
$tempObjets[] = $datacon;
if ($iteration % 1000 == 0) {
try{
$em->flush();
$em->clear();
foreach ($tempObjets as $tempObject) {
$em->detach($tempObject);
}
$tempObjets = null;
gc_enable();
gc_collect_cycles();
}catch (\Doctrine\ORM\ORMException $e )
{
$this->get('session')->getFlashBag()->add('error', 'error');
$this->get('logger')->error($e->getMessage());
}
假设我的文件csv包含50000个条目,但是只插入了45000个条目,并且5000个条目包含错误,我应该将它们放在一个数组变量中,例如包含所有错误对象的errorsdata()。
我如何检测是否已插入行以及如何将其添加到errorsdata变量,前提是该脚本每1000次迭代刷新数据。
感谢您的帮助