使用laravel使用csv更新表

时间:2018-04-18 13:43:57

标签: laravel eloquent maatwebsite-excel

我尝试使用Maatwebsite / Laravel-Excel更新表格。

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[] =
            [
              //'name' => $row['name'],
              'age' => $row['age'],
              'phone' => $row['phone'],
              //'created_at' => $row['created_at']
            ];
          }
          if(!empty($dataArray))
            {
                //Item::insert($dataArray);
                DB::table('items')
                ->where('name', $row['name'])->update($dataArray);

                return view('imported')->with('success', 'Course updated');
            }
      }

     }
   }
}

但它给出错误:

  

SQLSTATE [42S22]:未找到列:1054未知列' 0'在'字段列表' (SQL:更新项目设置0 = 20,其中name = james

这是我的csv

name,age,phone
James,20,888839939
Joseph,54,3444444
Hanson,30,99999999

以上是我尝试更新的csv文件。

2 个答案:

答案 0 :(得分:0)

问题是$dataArray是一个数组数组,所以要使它工作,你必须遍历每个数组:

if(!empty($dataArray)) {
    foreach ($dataArray as $array) {
        DB::table('items')
            ->where('name', $row['name'])
            ->update($array);
    }

    return view('imported')->with('success', 'Course updated');
}

但是这没有多大意义,因为每次用 name = $ row ['name'] 更新行时,所以你需要更新你设置的行从{strong> $ dataArray [] = ... 到 $ dataArray = ... * $dataArray值,因此它可以有一个值。< / p>

答案 1 :(得分:0)

如果有任何身体碰到这个,这就是我解决它的方式。

public function import(Request $request)
    {
      if($request->file('imported-file'))
      {
                $path = $request->file('imported-file')->getRealPath();


                Excel::load($path)->each(function (Collection $csvLine) {


                    DB::table('items')
                        ->where('id', $csvLine->get('id'))
                        ->update(['name' => $csvLine->get('name'),'phone' => $csvLine->get('phone'),'age' => $csvLine->get('age')]);

               });
               return view('imported')->with('success', 'Course updated');


       }
    }

我使用了each()集合方法来遍历csv文件并赢得了战斗。