我想使用Symfony/Doctrine(导入的ddeboer数据导入捆绑包)将ExcelSheet导入到我的数据库
导入数据并首先检查数据是否已导入的最佳做法是什么?
我想到了两种可能性:
1)
$numarray = $repo->findAllAccounts();
$import = true;
foreach ($reader as $readerobjectkey => $readervalue) {
foreach ($numarray as $numkey){
if (($numkey->getNum() == $readervalue['number'])){
$import = false;
}
}
if($import){
$doctrineWriter ->disableTruncate()
->prepare()
->writeItem(
array(
'num' => $readervalue['number'],
'name' => $readervalue['name'],
'company' => $companyid
)
)
->finish();
2)
foreach ($reader as $row =>$value ) {
// check if already imported
$check = $this->checkIfExists($repo,'num', $value['number']);
if ($check){
echo $value['number']." Exists <br>";
}else{echo $value['number']." new Imported <br>";
$doctrineWriter ->disableTruncate()
->prepare()
->writeItem(
array(
'num' => $value['number'],
'name' => $value['name'],
'company' => $companyid
)
)
->finish();
public function checkIfExists($repo, $field, $value){
$check = $repo->findOneBy(array($field => $value));
return $check;
问题是大的Excel数据表(3000行以上),两种解决方案我都超时了。。。。
错误:超过的最长执行时间30秒
一般来说:对于性能问题:最好生成1000个查询来检查值是否存在(findOneBy),还是使用两个foreach循环来比较值?任何帮助都会很棒!
提前Thx。。。
您可以尝试检查文件的filemtime:http://php.net/manual/en/function.filemtime.php
我不确定它是否能正常工作,但值得一试,看看修改后的日期是否如预期那样工作。
否则,你应该考虑另一种方法来检查这样的数据,这将需要大量的资源。也许可以向excel文件中添加一些元数据:
http://docs.typo3.org/typo3cms/extensions/phpexcel_library/1.7.4/manual.html#_Toc237519906
除了循环或查询数据库中的大数据之外,任何其他方式都更好。