Excel file Import to database laravel with Validation
Sun Apr 09 2023 15:47:50 GMT+0000 (Coordinated Universal Time)
Saved by @ahmad007
1. install package by using following command or for latest instructions check laravel excel websitecomposer require maatwebsite/excel 2. Then in providers write the following code 'providers' => [ /* * Package Service Providers... */ Maatwebsite\Excel\ExcelServiceProvider::class, ] 3. Then in aliases write the following code 'aliases' => [ ... 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ] 4. To publish the config, run the vendor publish command: php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config 5. Then make a controller called BulkEmployeeController 6. The write the following routes Route::get('/bulk-employee-create', [BulkEmployeeController::class, 'create_bulk'])->name('bulk.employee.create'); Route::get('/export-employees', [BulkEmployeeController::class, 'export_employees'])->name('export.employees'); Route::post('/import-employees', [BulkEmployeeController::class, 'import_employees'])->name('import.employees'); 7. Then create import and export classes by using commands php artisan make:import EmployeeImport --model=Employee php artisan make:export EmployeeExport --model=Employee Then in import class write the following code while in export class no need to write anything 'first_name' => $row['0'], 'last_name' => $row['1'], 'company_id' => $row['2'], 'email' => $row['3'], 'phone' => $row['4'], 8. Then in the model Employee write the folloing code for bulk insert fillable protected $fillable = ['first_name', 'last_name', 'company_id', 'email', 'phone']; 9. Then in import class write the following methods for import and export public function import_employees(Request $request) { Excel::import(new EmImport, $request->file('file')); return redirect()->route('employees.index'); } public function export_employees() { return Excel::download(new EmployeemExport, 'employees.xlsx'); } here please remember to import import, export and Excel classes in the header section use App\Imports\EmImport; use App\Exports\EmployeemExport; use Maatwebsite\Excel\Facades\Excel; -------------------Validation--------------- use the followings in the head of import Class use Maatwebsite\Excel\Concerns\WithHeadingRow; use Maatwebsite\Excel\Concerns\WithValidation; use Maatwebsite\Excel\Concerns\SkipsErrors; use Maatwebsite\Excel\Concerns\SkipsOnError; then edit the code to that class EmImport implements ToModel,WithHeadingRow,WithValidation, SkipsOnError then inside the class use Importable, SkipsErrors; Now write the rules with code like following public function rules(): array { return [ 'first_name' => 'required', '*.first_name' => 'required', 'last_name' => 'required', '*.last_name' => 'required', 'email' => 'required', '*.email' => 'required', ]; } then in create bulk page write the following code before bulk upload form to show errors @if (isset($errors) && $errors->any()) <div class="alert alert-danger"> @foreach ($errors->all() as $error) {{$error}} @endforeach </div> @endif
Comments