sazzadbinashique/laravel-excel-importer
Installation:
composer require sazzadbinashique/laravel-excel-importer
php artisan vendor:publish --provider="SazzadBinAshique\LaravelExcelImporter\ExcelImporterServiceProvider"
php artisan migrate
Define an Import Type:
In config/excel-importer.php, add a new import type under types:
'user_import' => [
'model' => \App\Models\User::class,
'columns' => [
'name' => 'Name',
'email' => 'Email',
'role' => 'Role',
],
'rules' => [
'name' => 'required|string',
'email' => 'required|email',
'role' => 'required|in:admin,user',
],
],
First Use Case:
/excel-importer.Dashboard Integration:
/excel-importer) for file uploads, previews, and imports.ExcelImporterController or overriding views in resources/views/vendor/excel-importer.Livewire Component:
ExcelImporter component for custom logic:
use SazzadBinAshique\LaravelExcelImporter\Livewire\ExcelImporter;
class CustomExcelImporter extends ExcelImporter {
protected $customField = '';
public function mount() {
$this->importType = 'user_import';
}
public function import() {
// Custom logic before import
$this->dispatch('custom-event');
parent::import();
}
}
Validation and Mapping:
columns and rules in the config to map Excel headers to model fields.required, unique, custom callbacks).Chunked Imports:
'chunk_size' => 100, // Default: 100
Post-Import Actions:
imported event:
Event::listen('excel-importer.imported', function ($importType, $records) {
// Send notification, log, etc.
});
public function import(Request $request) {
$request->validate(['file' => 'required|file']);
ExcelImporter::import($request->file('file'), 'user_import');
}
ExcelImporter::dispatch($request->file('file'), 'user_import')->onQueue('imports');
Livewire Dependency:
composer require livewire/livewire
php artisan livewire:discover.Column Mismatches:
columns config keys exactly (case-sensitive).trim or strtolower in rules for flexibility:
'rules' => [
'email' => 'required|email|unique:users,email',
'name' => 'required|string|min:3',
],
Memory Limits:
php.ini or use chunking:
'chunk_size' => 50; // Lower for memory constraints
Dashboard Permissions:
auth. Customize middleware in ExcelImporterServiceProvider:
protected $middleware = [\App\Http\Middleware\AdminMiddleware::class];
File Size Limits:
upload_max_filesize and post_max_size may block large uploads. Configure in .env:
UPLOAD_MAX_SIZE=100M
POST_MAX_SIZE=100M
Preview Issues:
storage/logs/laravel-excel-importer.log for parsing errors.Validation Errors:
dd($this->errors) in a Livewire component to inspect validation failures.Progress Tracking:
Livewire.emit('track-progress', { step: 'importing', percent: 50 });
Custom Importers:
ExcelImporter class to add pre/post-processing:
class CustomImporter extends \SazzadBinAshique\LaravelExcelImporter\ExcelImporter {
public function transformRecord($record) {
$record['email'] = strtolower($record['email']);
return $record;
}
}
Dashboard Customization:
resources/views/vendor/excel-importer.resources/views/vendor/excel-importer/dashboard.blade.php.Event Hooks:
excel-importer.preparing, excel-importer.importing, and excel-importer.imported events.Storage Backends:
maatwebsite/excel’s storage adapters (S3, etc.) by configuring Excel::store():
Excel::store(new S3Store('bucket-name'), 'public');
How can I help you explore Laravel packages today?