Advertisement
Guest User

CSV import trait

a guest
May 4th, 2021
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.96 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers\Traits;
  4.  
  5. use \SpreadsheetReader;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\File;
  8. use Illuminate\Support\Str;
  9.  
  10. trait CsvImportTrait
  11. {
  12.     public function processCsvImport(Request $request)
  13.     {
  14.         try {
  15.             $filename = $request->input('filename', false);
  16.             $path     = storage_path('app/csv_import/' . $filename);
  17.  
  18.             $hasHeader = $request->input('hasHeader', false);
  19.  
  20.             $fields = $request->input('fields', false);
  21.             $fields = array_flip(array_filter($fields));
  22.  
  23.             $modelName = $request->input('modelName', false);
  24.             $model     = 'App\\Models\\' . $modelName;
  25.  
  26.             $reader = new SpreadsheetReader($path);
  27.             $insert = [];
  28.  
  29.             foreach ($reader as $key => $row) {
  30.                 if ($hasHeader && $key == 0) {
  31.                     continue;
  32.                 }
  33.  
  34.                 $tmp = [];
  35.                 foreach ($fields as $header => $k) {
  36.                     if (isset($row[$k])) {
  37.                         $tmp[$header] = $row[$k];
  38.                     }
  39.                 }
  40.  
  41.                 if (count($tmp) > 0) {
  42.                     $insert[] = $tmp;
  43.                 }
  44.             }
  45.  
  46.             $for_insert = array_chunk($insert, 100);
  47.  
  48.             foreach ($for_insert as $insert_item) {
  49.                 $model::insert($insert_item);
  50.             }
  51.  
  52.             $rows  = count($insert);
  53.             $table = Str::plural($modelName);
  54.  
  55.             File::delete($path);
  56.  
  57.             session()->flash('message', trans('global.app_imported_rows_to_table', ['rows' => $rows, 'table' => $table]));
  58.  
  59.             return redirect($request->input('redirect'));
  60.         } catch (\Exception $ex) {
  61.             throw $ex;
  62.         }
  63.     }
  64.  
  65.     public function parseCsvImport(Request $request)
  66.     {
  67.         $file = $request->file('csv_file');
  68.         $request->validate([
  69.             'csv_file' => 'mimes:csv,txt',
  70.         ]);
  71.  
  72.         $path      = $file->path();
  73.         $hasHeader = $request->input('header', false) ? true : false;
  74.  
  75.         $reader  = new SpreadsheetReader($path);
  76.         $headers = $reader->current();
  77.         $lines   = [];
  78.  
  79.         $i = 0;
  80.         while ($reader->next() !== false && $i < 5) {
  81.             $lines[] = $reader->current();
  82.             ++$i;
  83.         }
  84.  
  85.         $filename = Str::random(10) . '.csv';
  86.         $file->storeAs('csv_import', $filename);
  87.  
  88.         $modelName     = $request->input('model', false);
  89.         $fullModelName = 'App\\Models\\' . $modelName;
  90.  
  91.         $model     = new $fullModelName();
  92.         $fillables = $model->getFillable();
  93.  
  94.         $redirect = url()->previous();
  95.  
  96.         $routeName = 'admin.' . strtolower(Str::plural(Str::kebab($modelName))) . '.processCsvImport';
  97.  
  98.         return view('csvImport.parseInput', compact('headers', 'filename', 'fillables', 'hasHeader', 'modelName', 'lines', 'redirect', 'routeName'));
  99.     }
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement