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

Posted

技术标签:

【中文标题】如何在 Symfony 学说实体中导入 Excelsheets【英文标题】:How to import Excelsheets in Symfony doctrine entity 【发布时间】:2015-03-21 10:25:58 【问题描述】:

我想使用 Symfony/Doctrine 将 ExcelSheet 导入我的数据库(导入的 ddeboer 数据导入包)

导入数据并首先检查数据是否已导入的最佳做法是什么?

我在想两种可能性:

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>";
    elseecho $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;

问题在于大型 exceldatasheets(3000 行以上),两种解决方案我都超时....

错误:超过 30 秒的最大执行时间

一般来说:对于性能问题:是更喜欢生成 1000 个查询来检查值是否存在(findOneBy)还是使用两个 foreach 循环来比较值? 任何帮助都是极好的!

提前谢谢...

【问题讨论】:

对于大型导入,下拉到 sql 和准备好的查询。 【参考方案1】:

您可以尝试检查文件的filemtime:http://php.net/manual/en/function.filemtime.php

我不确定它是否能正常工作,但值得一试,看看修改后的日期是否按预期工作。

否则您应该考虑另一种检查数据的方法,这样做会占用大量资源。可能会在 excel 文件中添加一些元数据:

http://docs.typo3.org/typo3cms/extensions/phpexcel_library/1.7.4/manual.html#_Toc237519906

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

【讨论】:

以上是关于如何在 Symfony 学说实体中导入 Excelsheets的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 数据库中导入 Excel 数据

如何让 Symfony 2 与学说 ORM 只保留一次相关实体

实体的 Symfony 学说问题 [重复]

Symfony2 - 学说:模式:更新失败,实体在包之外(解耦)

Symfony 2 实体连接或学说查询连接

Symfony4 学说单元测试:实体在缓存中有旧数据?