2016-10-27 5 views
1

Я использую следующий пакет для импорта большого файла CSV в базу данных MySQL:Импорт большой CSV в Laravel

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

Вот мой код контроллера:

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

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

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

Вот линия от композитора .json

"maatwebsite/excel": "~2.1.0" 

Вот мой конфиг/app.php файл:

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

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

Я получаю эту ошибку, и я не могу найти решение:

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

Я попытался ссылку для решения, но не повезло:

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

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

ответ

1

Вы делаете некоторые манипуляции для каждой строки csv раньше serting в базу данных или это похоже на то, что вам нужно импортировать данные непосредственно в базу данных?

Просто быстрый наконечник, его ваш CSV в последовательности, как ваши столбцы таблицы базы данных упорядочены, вы можете использовать Ubuntu терминал для импорта больших файлов:

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

Если это то, что вы хотите сделать программно или в cron, тогда вам нужен этот пакет. Вы можете попробовать очистить кэш Laravel, а также попробовать

композитор дамп-автозагрузку

еще одна вещь, чтобы гарантировать, что нет никаких специальных символов в формате CSV, которые не могут получить импортированной.

+0

Да, мне нужно манипулировать строк при импорте :( – Ashutosh

+0

Хорошо, позвольте мне проверить файлы GitHub быстро –

+0

Вы можете попробовать любой прочь следующее:. Изменить «класс ChunkedReadJob реализует ShouldQueue» в «класс ChunkedReadJob расширяет Работа реализует ShouldQueue» или «класс ChunkedReadJob расширяет работу, реализует ShouldQueue, SelfHandling» –

1

Вместо этого пакета попробуйте выполнить процедуру LOAD DATA INFILE MySQL, используя объект базы данных Laravel. Вот example. Я использовал это для импорта больших CSV-файлов размером (300M-400M) в mysql db и работал для меня.