如何在Symfony学说实体中导入Excelsheets


How to import Excelsheets in Symfony doctrine entity

我想使用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

除了循环或查询数据库中的大数据之外,任何其他方式都更好。