【问题标题】:update table with csv using laravel使用 laravel 用 csv 更新表
【发布时间】:2018-09-28 19:00:11
【问题描述】:

我正在尝试使用 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 其中名称 = james

这是我的 csv

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

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

【问题讨论】:

  • 你得到的错误是什么。
  • @TheFallen SQLSTATE[42S22]:未找到列:1054 '字段列表'中的未知列'0'(SQL:更新items设置0 = 20,其中name = james

标签: laravel eloquent maatwebsite-excel


【解决方案1】:

问题是$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'] 更新行,所以你可能需要更新你设置的行$dataArray 的值从 $dataArray[] = ...$dataArray = ...*,因此它可以有一个值。

【讨论】:

  • 这部分工作,只有文件的第一行被选中,其他行被忽略。我尝试将 $dataArray[] = ... 更新为 $dataArray = ...* 但它引发了异常。
【解决方案2】:

如果有人遇到这个问题,我就是这样解决的。

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 文件,它赢得了战斗。

【讨论】:

    猜你喜欢
    • 2017-10-18
    • 2016-05-18
    • 2020-01-29
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多