Welcome to CodeCrew Infotech

shape shape
Shape Shape Shape Shape

Laravel Excel Imports with Queue Jobs

In web development, managing large datasets can be a challenge, especially when dealing with file imports. Laravel Excel is a powerful package that simplifies Excel and CSV file handling in Laravel. Coupled with Laravel's queue system, you can efficiently manage these imports without affecting the performance of your application. This blog will guide you through the steps to implement queue jobs for importing data using Laravel Excel in Laravel 11.

1. Create a project:

Now, open a terminal and run this command:

composer create-project laravel/laravel excel-import-laravel

After Setup Project:

cd excel-import-laravel

2. Database Configuration:

Configuring database credentials for the Laravel application is essential. Simply update the .env file located in the root directory of the application:


Migrate the database using the following command:

php artisan migrate

3. Install the required packages: -

Install the maatwebsite/excel package via Composer:

Now, open terminal

composer require maatwebsite/excel

4. Generate Migration and Model: -

Now, open terminal

php artisan make:model Product -m

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
     * Run the migrations.
     * @return void
    public function up()
        Schema::create('products', function (Blueprint $table) {
            $table->decimal('price', 8, 2);

     * Reverse the migrations.
     * @return void
    public function down()

To begin, open your 'app/Models/Product.php' file and make the necessary modifications to the existing code.


namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
    protected $fillable = ['name', 'description', 'price'];

5. Create an Excel Import Job:

Next, create a new job for importing Excel data. You can generate a new job using the Artisan command:

Here's the command:

php artisan make:job ImportExcelJob

This will create a new job class in the app/Jobs directory. Open the ImportExcelJob class and update it with the following code:


namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\Product;

class ImportExcelJob implements ShouldQueue
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $filePath;

    public function __construct($filePath)
        $this->filePath = $filePath;

    public function handle()
        $rows = Excel::toArray([], $this->filePath);
        $headingRow = $rows[0][0]; // Get the heading row

        $data = array_slice($rows[0], 1);

        foreach ($data as $row) {
            $rowData = array_combine($headingRow, $row);

            $product = new Product([
                'name' => $rowData['Name'], 
                'description' => $rowData['Description'], 
                'price' => $rowData['Price'], 

            // Save the product

6. Generate the Controller :-

First, create the controller using the Artisan command:

php artisan make:controller ExcelController

Open the newly created ExcelController located in the app/Http/Controllers directory and add methods to handle file uploads and dispatching the import job. Here’s an example implementation:


namespace App\Http\Controllers;

use App\Jobs\ImportExcelJob;
use Illuminate\Http\Request;

class ExcelController extends Controller
     * Display the Excel import form.
     * @return \Illuminate\View\View
    public function index()
        return view('import');

     * Handle the Excel import request.
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
    public function import(Request $request)
            'excel_file' => 'required|file|mimes:xlsx,xls',

        $file = $request->file('excel_file');
        $filePath = $file->getPathname();

        return redirect()->back()->with('success', 'Excel import job has been initiated.');

To begin, open your 'resources/views/layouts/app.blade.php' file and make the necessary modifications to the existing code.

<!DOCTYPE html>

    <title>Laravel 11 Product Import</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />

    <div class="container">


create `resources/views/import.blade.php

    <div class="card mt-5">
        <h3 class="card-header">Product Import</h3>
        <div class="card-body">
                <div class="alert alert-success" role="alert">
                    {{ $value }}
            @if ($errors->any())
                <div class="alert alert-danger">
                    <strong>Whoops!</strong> There were some problems with your input.<br><br>
                        @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
            <form action="{{ route('excel.import') }}" method="POST" enctype="multipart/form-data">
                <input type="file" name="excel_file" required>
                <button class="btn btn-success" type="submit">Import Excel</button>


7. Add Routes:

To begin, open your 'routes/web.php' file and make the necessary modifications to the existing code.


use App\Http\Controllers\ExcelController;
use Illuminate\Support\Facades\Route;

Route::get('/', [ExcelController::class, 'index'])->name('excel.index');
Route::post('/import-excel', [ExcelController::class, 'import'])->name('excel.import');


8. Run the Laravel Project:

Run the following command:

php artisan serve

Now, open your web browser and navigate to the provided URL to view the application output.


Finally, you need to ensure that Laravel's queue workers are running and processing the jobs. You can start a worker using the following Artisan command:

php artisan queue:work


In conclusion, implementing Excel imports with Laravel Excel and queue jobs in Laravel 11 streamlines data management tasks efficiently. This setup ensures seamless handling of large datasets without compromising application performance, enhancing overall user experience and productivity.

Thank You...