寫入數(shù)據(jù)庫
public function lessons_excel(Request $request)
{
$time_star = time();//得到當前時間戳肌割,用來在最后計算文件導入完畢后的用時
//set_time_limit — 設置腳本最大執(zhí)行時間啤覆。默認值為30秒复濒,或者是在php.ini的max_execution_time被定義的值,如果此值存在蒲肋。如果設置為0(零)蘑拯,沒有時間方面的限制。
$rlt = $this->upload_data($request);//調(diào)用上面的方法肉津,上傳文件得到文件名
if ($rlt["success"] == false) {
return response()->json($rlt);
} else {
try {
$data = [];
$error= [];
$data1 = array();
$err_count='0';
$success_count='0';
$table = $this->load_excel($rlt["message"]);//調(diào)用load_excel方法導入文件
foreach ($table as $key =>$v) {
if($key != '0'){
foreach ($table[0] as $key1 =>$v1) {
$row[$v1] = trim($v[$key1]);//姓名
}array_push($data, $row);
}
}array_push($data1, $data);
foreach($data as $d){
if(!$d)continue;
try{
$insert_id = DB::table("school_lessons")->insertGetId($d);
//一些數(shù)據(jù)庫操作
$success_count++;
}catch (\Exception $e){
$err_count++;
array_push($error,$d);//失敗數(shù)據(jù)存起來后面將把失敗數(shù)據(jù)導出
continue;
}
}
if($error){
array_unshift($error,$table[0]);//將標題插入失敗數(shù)據(jù)的第一行强胰,后面導出
session(['error'=>$error]);//將要導出的內(nèi)容存入session 鍵值為error
$download = true;//向前臺返回一個標識,true說明有失敗數(shù)據(jù)
}else{
$download = false;
}
$time_end = time();
return response()->json(["success" => true, "message" => "本次共導入 ".($success_count+$err_count).' 條數(shù)據(jù), 其中成功 '.$success_count.' 條 , 其中失敗 '.$err_count.' 條 妹沙。 ','download'=>$download,'time'=>($time_end-$time_star)]);
} catch (\Exception $e) {
return response()->json(["success" => false, "message" => "數(shù)據(jù)導入失敗"]);
}
}
調(diào)用上面的方法,上傳文件得到文件名
//上傳文件調(diào)用的方法
private function upload_data(Request $request)//導入的時候 上傳文件
{
if (!$request->hasFile('file')) {
return [
'success' => false,
'message' => '上傳文件為空'
];
}//判斷文件是否上傳成功
$file = $request->file('file');
if (!$file->isValid()) {
return [
'success' => false,
'message' => '文件上傳出錯'
];
}
//獲取原文件名
$originalName = $file->getClientOriginalName();
//擴展名
$ext = $file->getClientOriginalExtension();
//文件類型
$type = $file->getClientMimeType();
//臨時絕對路徑
$realPath = $file->getRealPath();
$filename =date('Y-m-d H_i_s').uniqid().'.'.$ext;
$storage_path = 'storage/excel';
$bool = $file->move($storage_path, $filename);
if($bool){
return [//上傳成功返回文件名稱
'success' => true,
'message' => $filename
];
}else{
return [
'success' => false,
'message' => '文件保存失敗'
];
}
}
調(diào)用load_excel方法導入文件
private function load_excel($filename)
{
$filePath = 'storage/excel/' . $filename;
$reader = Excel::load($filePath);//要開始導入文件熟吏,可以使用->load($filename)距糖。回調(diào)是可選的牵寺。
$reader = $reader->getSheet(0);//得到Excel的第一頁內(nèi)容悍引,如下圖3
return $reader->toArray();
}