Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Не могу понять код. Логика такая: импортируется файл csv, все записывается в бд, только вот если в бд существует такая схожая запись, данные почему то не записываются.
Мой контроллер:
public function uploadFile(Request $request){
if ($request->input('submit') != null ){
$file = $request->file('file');
$profile_id = $request->input('profile_id');
// File Details
$filename = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$tempPath = $file->getRealPath();
$fileSize = $file->getSize();
$mimeType = $file->getMimeType();
// Valid File Extensions
$valid_extension = array("csv");
// dd($valid_extension);
// 2MB in Bytes
$maxFileSize = 2097152;
// Check file extension
if(in_array(strtolower($extension),$valid_extension)){
// dd($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");
// dd($filepath);
$importData_arr = array();
// dd($importData_arr);
$i = 0;
while (($filedata = fgetcsv($file, 1000, ",")) !== FALSE) {
// dd($filedata);
$num = count($filedata );
// dd($num);
// Skip first row (Remove below comment if you want to skip the first row)
/*if($i == 0){
$i++;
continue;
}*/
for ($c=0; $c < $num; $c++) {
$importData_arr[$i][] = $filedata [$c];
// dd($filedata);
}
$i++;
}
fclose($file);
// dd($importData_arr);
// Insert to MySQL database
foreach($importData_arr as $importData){
// dd($importData_arr);
$insertData = array(
// "username"=>$importData[1],
// "name"=>$importData[2],
// "gender"=>$importData[3],
"profile_id"=>$profile_id,
// "name"=>$test = dd(mb_detect_encoding($importData[0])),
// "name"=>iconv("WINDOWS-1251", "UTF-8",$importData[0])
"name"=>$importData[0]
);
Plus::insertData($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()->back();
}
Моя модель:
public static function insertData($data){
$userid = Auth::id();
$value=DB::table('profile_parameters_p')->where('name', $data['name'])->get();
// dd($value);
if($value->count() == 0){
// dd("Test");
$test = DB::table('profile_parameters_p')
// ->insert('profile_id' => $userid, $data);
->insert($data, ['profile_id' => $userid]);
// dd($test);
// DB::table('profile_parameters_p')
// // ->insert('profile_id' => $userid, $data);
// ->insert(['profile_id' => $userid]);
}
}
Изменено admshik (16.07.2019 09:45:27)
Не в сети
ох, хардкодишь блин, я мозг сломал
какой к фигу DB::table ?
ОРМ Eloquent не судьба использовать, если уж модель написал ?
Разделил бы код по логически разнесённым файлам, почитай SOLID программирование, а то действительно приходтся внимать в темы не касающиеся вставки данных.
Не в сети
в догонку и по теме:
зачем вставлять дубликаты? это требование или бага?
тема не раскрыта.
если бага и не хочется делать правильно, то используй try-catch с пустым catch или вставь в него continue;
Не в сети
а ещё тема не оформлена как описано в первом топике раздела.
Не в сети
Страницы 1