使用 laravel 用 csv 更新 table
update table with csv using laravel
我正在尝试使用 Maatwebsite/Laravel-Excel 更新 table。
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]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update items set 0 = 20 where name = james
这是我的 csv
name,age,phone
James,20,888839939
Joseph,54,3444444
Hanson,30,99999999
以上是我正在尝试更新的 csv 文件。
问题是 $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 = ...*,所以它可以有一个值。
万一有人遇到这个问题,我就是这样解决的。
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 文件并赢得了战斗。
我正在尝试使用 Maatwebsite/Laravel-Excel 更新 table。
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]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: update items set 0 = 20 where name = james
这是我的 csv
name,age,phone
James,20,888839939
Joseph,54,3444444
Hanson,30,99999999
以上是我正在尝试更新的 csv 文件。
问题是 $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 = ...*,所以它可以有一个值。
万一有人遇到这个问题,我就是这样解决的。
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 文件并赢得了战斗。