Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 16.07.2019 09:44:38

Импорт csv в бд

Не могу понять код. Логика такая: импортируется файл 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)

Не в сети

#2 Вчера 18:43:50

Re: Импорт csv в бд

ох, хардкодишь блин, я мозг сломал smile

какой к фигу DB::table ?

ОРМ Eloquent не судьба использовать, если уж модель написал ?

Разделил бы код по логически разнесённым файлам, почитай SOLID программирование, а то действительно приходтся внимать в темы не касающиеся вставки данных.

Не в сети

#3 Вчера 18:45:47

Re: Импорт csv в бд

в догонку и по теме:

зачем вставлять дубликаты? это требование или бага?
тема не раскрыта.

если бага и не хочется делать правильно, то используй try-catch с пустым catch или вставь в него continue;

Не в сети

#4 Вчера 18:46:28

Re: Импорт csv в бд

а ещё тема не оформлена как описано в первом топике раздела.

Не в сети

Подвал раздела