如何在 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 2 与学说 ORM 只保留一次相关实体