【发布时间】:2019-08-26 11:19:53
【问题描述】:
我正在尝试在 Laravel 中导入一个 excel 表,但问题是如果用户不小心导入了同一个 excel 表,或者如果他导入了另一个与数据库中具有相同数据的 excel 表,那么数据将被重复,我想避免这种情况,所以我想在导入数据之前做一些验证
我尝试从数据库中获取数据和数据表单 excel 并将它们加入一个数组并使用 php 函数 array_unique() 但它显示错误数组到字符串转换
我的路线:
//Uploading Excel Routes
Route::get('/cvs/upload','UploadController@index');
Route::post('/cvs/uploadFile','UploadController@csvfileupload');
我的控制器
public function csvfileupload(Request $request)
{
if ($request->input('submit') != null ){
$file = $request->file('file');
// File Details
$filename = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$tempPath = $file->getRealPath();
$fileSize = $file->getSize();
$mimeType = $file->getMimeType();
// Valid File Extensions
$valid_extension = array("csv");
// 2MB in Bytes
$maxFileSize = 2097152;
// Check file extension
if(in_array(strtolower($extension),$valid_extension)){
// Check file size
if($fileSize <= $maxFileSize){
// File upload location
$location = 'uploads';
// Upload file
$file->move($location,$filename);
// Import CSV to Database
$filepath = public_path($location."/".$filename);
// Reading file
$file = fopen($filepath,"r");
$importData_arr = array();
$i = 0;
while (($filedata = fgetcsv($file, 1300, ",")) !== FALSE) {
$num = count($filedata );
for ($c = 0; $c < $num; $c++) {
$importData_arr[$i][] = $filedata [$c];
}
$i++;
}
fclose($file);
// Check For Unique Values On Excel Sheet
$tempArr = array_unique(array_column($importData_arr, 1));
$vals = array_intersect_key($importData_arr, $tempArr);
// Get Current Time
$mytime = Carbon\Carbon::now();
// Insert The values in the Categories Table
foreach ($vals as $importData) {
$insertData = array("categories_name" => str_slug($importData[1]), "created_at" => $mytime->toDateTimeString());
Categories::insert($insertData);
}
Session::flash('message','Import Successful.');
}else{
Session::flash('message','File too large. File must be less than 2MB.');
}
}else{
Session::flash('message','Invalid File Extension.');
}
}
// Redirect to index
return redirect()->action('UploadController@index');
}
}
我的视图文件:
@section('content')
<!-- Message -->
@if(Session::has('message'))
<p >{{ Session::get('message') }}</p>
@endif
<center>
<!-- Form -->
<form action="/cvs/uploadFile" method="post" class="upload" enctype="multipart/form-data">
{{ csrf_field() }}
<input type='file' name='file' >
<input type='submit' name='submit' value='Import'>
</form>
</center>
<br>
<br>
@endsection
【问题讨论】: