Hello, Laravel developers! In this article, I'll show you how to create a seeder in Laravel 11 that imports data from a CSV file into the database. We'll use a seeder to read the CSV file and automatically import the data when we run the db:seed
command.
This method is especially useful when you need to insert large amounts of data, like country or city information. Instead of manually handling it every time, you can set up a seeder that reads the CSV file and imports the data into the database with a simple artisan command.
Laravel 11 Create Seeder with CSV File
In this step, we'll install the laravel 11 application using the following command.
composer create-project --prefer-dist laravel/laravel laravel-11-example
Next, we'll create a country CSV file with the name and code.
database/data/country.csv
Then, we'll create a seeder using the following command.
php artisan make:migration create_countries_table
Migration:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCountriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('countries', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('code');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('countries');
}
}
Now, run the migration using the following command.
php artisan migrate
app/Models/County.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
use HasFactory;
protected $fillable = [
'name', 'code'
];
}
Next, we'll create country seeder using the following command.
database/seeders/CountrySeeder.php
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Country;
class CountrySeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Country::truncate();
$csvFile = fopen(base_path("database/data/country.csv"), "r");
$firstline = true;
while (($data = fgetcsv($csvFile, 2000, ",")) !== FALSE) {
if (!$firstline) {
Country::create([
"name" => $data['0'],
"code" => $data['1']
]);
}
$firstline = false;
}
fclose($csvFile);
}
}
Then, run the seeder using the following command.
php artisan db:seed --class=CountrySeeder
You might also like:
Laravel is a fantastic language for web development, but it can throw you a curveball every now and then. If you've...
Jan-09-2023
In this article, we will see the laravel 10 custom validation error message. Here, we will learn about how to creat...
May-19-2023
In this article, we will see the bootstrap modal in angular 13. Ng Bootstrap is developed from bootstrap and they p...
Jun-10-2022
Are you a blogger who expresses his thoughts with the help of words? If yes, then you might have once thought to create...
Nov-13-2023