2016-10-27 6 views
1

Ich verwende folgendes Paket große CSV-Datei zu MySQL-Datenbank zu importieren:Import große csv in Laravel

https://github.com/Maatwebsite/Laravel-Excel

Hier ist mein Controller-Code:

Excel::filter('chunk')->load($file)->chunk(250, function($results) use ($count) 
    { 
     ++$count; 

     echo "<br/> Count = " . $count; 

     foreach($results as $row) 
     { 
      // do stuff 
     } 

Hier ist Linie vom Komponisten .json

"maatwebsite/excel": "~2.1.0" 

Hier ist meine config/app.php Datei:

'providers' => [ 
.... 
.... 
Maatwebsite\Excel\ExcelServiceProvider::class, 
], 

'aliases' => [ 
.... 
.... 
'Excel' => Maatwebsite\Excel\Facades\Excel::class, 
] 

Ich erhalte diesen Fehler und ich kann keine Lösung finden:

InvalidArgumentException in Dispatcher.php line 333: 
No handler registered for command [Maatwebsite\Excel\Readers\ChunkedReadJob] 

Ich habe versucht, für Lösung folgenden Link aber kein Glück:

https://github.com/Maatwebsite/Laravel-Excel/issues/957

https://github.com/Maatwebsite/Laravel-Excel/issues/952

Antwort

1

Machst du einige Manipulationen für jede Reihe von CSV vor in in die Datenbank einfügen oder müssen Sie die Daten direkt in die Datenbank importieren?

Nur eine schnelle Spitze, ist seine Ihre csv in der Reihenfolge, wie Sie Ihre Datenbanktabelle Spalten geordnet sind, können Sie ubuntu Terminal verwenden, um größere Dateien zu importieren:

mysql -uroot -proot --local_infile=1 3parsfdb -e "LOAD DATA LOCAL INFILE '/logfiles/Bat_res.csv' INTO TABLE Bat_res FIELDS TERMINATED BY ','" 

Ist dies etwas, was Sie tun möchten, programmatisch oder in Cron, dann brauchen Sie dieses Paket. Können Sie Laravel Cache versuchen Clearing- und versuchen auch

Komponist Dump-Autoload

Eine weitere Sache, um sicherzustellen, gibt es keine Sonderzeichen im csv sind, die nicht importiert werden können.

+0

Ja, ich brauche Reihen zu manipulieren, während :( – Ashutosh

+0

Import Okay, lassen Sie mich schnell auf die GitHub-Dateien überprüfen –

+0

Sie jeder versuchen kann aus folgenden:. Change „Klasse ChunkedReadJob implementiert ShouldQueue“ auf „Klasse ChunkedReadJob erstreckt Job implementiert ShouldQueue“ oder "Klasse ChunkedReadJob erweitert Job implementiert ShouldQueue, SelfHandling" –

1

Anstatt dieses Pakets versuchen Sie die MySQL-Prozedur LOAD DATA INFILE mit Laravels DB-Objekt. Hier ist ein example. Ich benutzte dies für den Import von großen CSV-Dateien (300M-400M) in eine MySQL-Datenbank und arbeitete für mich.