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.
Before we begin, make sure you have the following:
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
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.
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.'); } }
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>
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');
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!
Today we are going to learn about managing multiple PHP versions on ubuntu with xampp.…
Let's understand about how to use coding to improve your website's SEO. In today’s computerized…
Let's understand the most important linux commands for web developers. Linux, as an open-source and…
Today we are going to discuss top 75+ Laravel interview questions asked by top MNCs.Laravel,…
Today we will discuss about the Mailtrap integration with laravel 10 .Sending and receiving emails…
Today we are going to integrate FCM (Firebase Cloud Messaging) push notifications with ionic application.Firebase…