setDelimiter("|"); $iHeader = $this->obtenerIndiceDeHeader($csv); $csv->setHeaderOffset($iHeader); $registros = $csv->getRecords(); $toInsert = []; $categoria = ''; foreach($registros as $i => $registro){ //filas que están arriba del header if ($i <= $iHeader){ continue; } //finalizar if ($registro[$this::FILA_HEADER] == $this::ULTIMA_FILA){ break; } //filas que no tienen tipo if (!Arr::has($registro,$this::FILA_HEADER)|| trim($registro[$this::FILA_HEADER]) == ''){ var_dump("no hay tipo en la fila " . $i); continue; } //saltear bono de transporte if ($registro[$this::FILA_HEADER] == "T"){ continue; } //obtener categoria if ($registro['Producto'] == '') { //es la pregunta de la copa? if (Str::contains($registro[$this::FILA_HEADER],"¿")) { continue; } $categoria = $registro[$this::FILA_HEADER]; continue; } //completar producto $toInsert[] = [ 'fila' => $i, 'categoria' => $categoria, 'nombre' => trim(str_replace('*', ' ',$registro['Producto'])), 'precio' => $registro['Precio'], 'proveedor_id' => $this->obtenerProveedor($registro['Producto']), 'bono' => $registro[$this::FILA_HEADER] == "B", 'requiere_notas'=> $registro[$this::FILA_HEADER] =="PTC", ]; } foreach (array_chunk($toInsert,DatabaseSeeder::CHUNK_SIZE) as $chunk) { DB::table('productos')->insert($chunk); } } private function obtenerIndiceDeHeader($csv){ $registros = $csv->getRecords(); $iheader = 0; foreach ($registros as $i => $registro){ if (strtolower($registro[0]) == strtolower($this::FILA_HEADER)) { $iheader = $i; break; } } return $iheader; } private function obtenerProveedor($nombre) { $result = null; if (Str::contains($nombre,"*")){ $result = Proveedor::firstOrCreate([ 'nombre' => 'Proveedor de economía solidaria', 'economia_solidaria' => 1, 'nacional' => 1 ])->id; } return $result; } }