我尝试使用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文件。
答案 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文件并赢得了战斗。