用户准备CSV文件以进行上传。唯一强制性和预期的CSV列标题为title
和description
。
但是,用户可以选择其他个人CSV列标题。也就是说,除了两个强制性title
和description
之外,用户还可以选择添加另一个remarks
time
e.t.c。
我想在所有其他列中完全获取额外数据(如果存在)并将其保存为一个数据库字段data
中的数组。
但是,我想不出一种获取额外字段数据的方法。见下文
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)){
foreach ($value as $v) {
$insert[] = ['title' => $v['title'], 'description' => $v['description'], ['data' => $v['xxxxxxxxxxxx'], ];
}
}
}
if(!empty($insert)){
Item::insert($insert);
return back()->with('success','Insert Record successfully.');
}
}
}
return back()->with('error','Please Check your file, Something is wrong there.');
如何获取可选的额外数据并保存?
任何?
答案 0 :(得分:1)
您可以将其存储在JSON中......
foreach ($value as $v) {
$data = json_encode($v);
$insert[] = ['title' => $v['title'], 'description' => $v['description'], 'data' => $data ];
}
这包括标题和说明,您可以创建一个没有该数据的新数组,然后根据需要存储它。
答案 1 :(得分:1)
我认为你的要求是从数组中取出所有列,除了标题和描述,并合并/ jsonify它们并存储它。如果这是你想要的
$insert = []; //just to be safe declare $insert here
foreach ($data->toArray() as $key => $value) {
if(!empty($value)){
foreach ($value as $v) {
$insert[] = [
'title' => $v['title'],
'description' => $v['description'],
'data' => array_except($v,['title', 'description']),//maybe you want to jsonify or merge data
];
}
}
}
//DB insertion logic
您可以阅读array_except()
辅助函数here