【问题标题】:Laravel Import CSV, index issueLaravel 导入 CSV,索引问题
【发布时间】:2017-10-19 16:10:40
【问题描述】:

试图找出我收到以下错误的原因:

未定义索引插件 ID

我正在使用 Maatwebsite\Excel 进行导入,并尝试使用此处的指南:

https://appdividend.com/2017/06/12/import-export-data-csv-excel-laravel-5-4/

我认为我把所有东西都放在了正确的位置,但是我从这段代码中得到了上述错误:

public function import(Request $request)
{
if($request->file('imported-file'))
{
        $path = $request->file('imported-file')->getRealPath();
        $data = Excel::load($path, function($reader)
  {
        })->get();

  if(!empty($data) && $data->count())
  {
    foreach ($data->toArray() as $row)
    {
      if(!empty($row))
      {
        $dataArray[] =
        [
          'plugin_id' => $row['Plugin ID'],
          'cve' => $row['CVE'],
          'cvss' => $row['CVSS'],
          'risk' => $row['Risk'],
          'host' => $row['Host'],
          'protocol' => $row['Protocol'],
          'port' => $row['Port'],
          'name' => $row['Name'],
          'synopsis' => $row['Synopsis'],
          'description' => $row['Description'],
          'solution' => $row['Solution'],
          'see_also' => $row['See Also'],
          'plugino_utput' => $row['Plugin Output']
        ];
      }
  }
  if(!empty($dataArray))
  {
     Shipping::insert($dataArray);
     return back();
   }
 }
}
}

这是在我的控制器文件中,并试图说明 CSV 中的标头与我的数据库中的不同。

知道为什么它会从 csv 方面抱怨列上的索引吗?

【问题讨论】:

  • foreach 中尝试简单的dd($row); 以查看$row 数组
  • 你能举一个语法例子吗?我做的不对(对 php 和 laravel 等很陌生)
  • 复制dd($row);并粘贴到foreach ($data->toArray() as $row) {之后
  • 返回数组:13[ 屏幕上有一条记录,但不向数据库中插入任何内容

标签: php laravel csv indexing import


【解决方案1】:

我现在从另一个帖子中结束了这个。这篇文章仍然有一个额外的部分,但是在 $value 上做一个 var_dump (我留下了,但注释掉了)我可以看到 $value 已经是一个数组,所以我没有将它传递给另一个数组,而是尝试了插入它,这似乎有效。

仍在努力放置错误和成功消息。

感谢 ljubadr 帮助我学习如何将一些打印类型语句放入代码中,以查看在各个地方得到的输出。

public function importExcel(Request $request)
{
    if($request->hasFile('import_file')){
        $path = $request->file('import_file')->getRealPath();
        $data = Excel::load($path, function($reader) {})->get();
        if(!empty($data) && $data->count()){
            foreach ($data->toArray() as $key => $value) {
                if(!empty($value)){
                    #var_dump($value);
                    Item::insert($value);
                }
            }
        return back()->with('success','Insert Record successfully.');
        }
    }
#return back()->with('error','Please Check your file, Something is wrong there.');
}
}

【讨论】:

  • 几千个 csv 记录运行良好。我需要它来处理 50 -> 100k 记录,我真的不想增加超时。任何大于 100k 的记录都开始在一个 csv 中完成所有事情有点愚蠢,但我认为任何事情都应该能够发生。例如,我所做的导入 csv 查询(shell 脚本)可以导入所有三个示例文件,一个有 1k 条记录,一个有 2k 条记录,一个有 15k 条记录,它可以在大约 3 秒内将它们全部放入数据库.
猜你喜欢
  • 2019-01-05
  • 2012-11-12
  • 2014-10-17
  • 2011-09-08
  • 2014-03-22
  • 1970-01-01
  • 2011-10-24
  • 2016-04-19
相关资源
最近更新 更多