Categories: Laravel

Efficiently Handling Large CSV Imports with Laravel 10: Step-by-Step Guide

Share your learning

CSV Imports with Laravel 10 is a very easy task, let’s go throw the step by step example below.
In modern web development, handling large datasets efficiently is a common challenge. CSV (Comma Separated Values) files are a popular format for storing tabular data, and importing such files into a database is a task often encountered by web developers. Laravel, a popular PHP web framework, provides powerful tools to streamline this process. In this article, we will explore an example of how to import a large CSV file into a database using Laravel 10, along with a step-by-step explanation of the process.

Prerequisites

Before we begin, make sure you have the following:

  • A basic understanding of Laravel and PHP.
  • A Laravel 10 project set up in your local development environment.
  • A large CSV file with the data you want to import.

Step 1: Set Up the Database

First, let’s set up the database table to store the imported data. For this example, we will use MySQL as the database engine. Open your Laravel project, navigate to the terminal, and run the following Artisan command to create a new migration:

php artisan make:migration create_csv_data_table --create=csv_data

This command will generate a new migration file in the database/migrations directory. Open the migration file and define the schema for the csv_data table:

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

class CreateCsvDataTable extends Migration
{
    public function up()
    {
        Schema::create('csv_data', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email');
            // Add more columns as per your CSV data
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('csv_data');
    }
}

Run the migration to create the table:

php artisan migrate

Step 2: Create the Model

Next, let’s create a model to represent the csv_data table. Run the following Artisan command:

php artisan make:model CsvData

This will generate a new model file in the app directory.

Step 3: Create the CSV Import Controller with Laravel 10

Now, let’s create a controller that will handle the CSV file import process. Run the following Artisan command:

php artisan make:controller CsvImportController

Open the CsvImportController.php file located in the app/Http/Controllers directory. We will add two methods to this controller: one to display the file upload form and another to handle the actual import process.

use App\Models\CsvData;
use Illuminate\Http\Request;

class CsvImportController extends Controller
{
    public function showForm()
    {
        return view('csv.import');
    }

    public function import(Request $request)
    {
        $request->validate([
            'csv_file' => 'required|mimes:csv,txt|max:2048',
        ]);

        if ($request->hasFile('csv_file')) {
            $file = $request->file('csv_file');
            $filePath = $file->getPathName();

            // Process the CSV file and import the data into the database
            // Here, we'll use Laravel's Eloquent ORM to streamline the process
            $csvData = array_map('str_getcsv', file($filePath));

            foreach ($csvData as $row) {
                CsvData::create([
                    'name' => $row[0], // Assuming name is in the first column of CSV
                    'email' => $row[1], // Assuming email is in the second column of CSV
                    // Add more fields as per your CSV data
                ]);
            }

            return redirect()->back()->with('success', 'CSV file imported successfully.');
        }

        return redirect()->back()->with('error', 'Failed to import CSV file.');
    }
}

Step 4: Create the View for File Upload

Create a new directory named csv inside the resources/views directory. Inside the csv directory, create a new file named import.blade.php and add the following code:

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 10 CSV Import Example</title>
</head>
<body>
    <h2>CSV File Import</h2>

    @if(session('success'))
        <p style="color: green;">{{ session('success') }}</p>
    @endif

    @if(session('error'))
        <p style="color: red;">{{ session('error') }}</p>
    @endif

    <form method="POST" action="{{ route('csv.import') }}" enctype="multipart/form-data">
        @csrf
        <input type="file" name="csv_file" accept=".csv">
        <button type="submit">Import CSV</button>
    </form>
</body>
</html>

Step 5: Define Routes

In the routes/web.php file, define the routes for the file upload form and the import process:

use App\Http\Controllers\CsvImportController;

Route::get('/csv/import', [CsvImportController::class, 'showForm'])->name('csv.import.form');
Route::post('/csv/import', [CsvImportController::class, 'import'])->name('csv.import');

Conclusion

In this article, we have explored an example of CSV imports with Laravel 10. We set up the database table, created a model, and implemented a controller to handle the file upload and import process. Laravel’s Eloquent ORM makes it straightforward to interact with the database, and by following the steps outlined here, you can efficiently import large datasets into your application. Remember to adjust the column mappings and validation rules in the controller based on your CSV data structure and requirements. Happy coding!

Satpal

Recent Posts

How to Switch PHP Versions in XAMPP Easily: Managing Multiple PHP Versions on Ubuntu

Today we are going to learn about managing multiple PHP versions on ubuntu with xampp.…

1 year ago

How to Use Coding to Improve Your Website’s SEO Ranking?

Let's understand about how to use coding to improve your website's SEO. In today’s computerized…

1 year ago

Most Important Linux Commands for Web Developers

Let's understand the most important linux commands for web developers. Linux, as an open-source and…

1 year ago

Top 75+ Laravel Interview Questions Asked by Top MNCs

Today we are going to discuss top 75+ Laravel interview questions asked by top MNCs.Laravel,…

1 year ago

Mailtrap Integration for Email Testing with Laravel 10

Today we will discuss about the Mailtrap integration with laravel 10 .Sending and receiving emails…

1 year ago

Firebase Cloud Messaging (FCM) with Ionic 6: Push Notifications

Today we are going to integrate FCM (Firebase Cloud Messaging) push notifications with ionic application.Firebase…

1 year ago