How to seed test data into a database in Laravel?

Laravel comes with in-built support to seed test data into a database. There are a few steps you should follow to successfully insert test data into the database. In this article, I will demonstrate to you how to accomplish it.

Before we begin, let's first install composer and nodejs.

Let’s start with a new Laravel project. To create a new Laravel project run

composer create-project --prefer-dist laravel/laravel blog


laravel new blog

Then create a database and go into your .env file and input your database name, the database user name, and the database password.


The next step would be to create a migration. To generate migration run

php artisan make:migration create_posts_table

This will create a migration for the Posts table in database\migrations directory

public function up(){
Schema::create('posts', function (Blueprint $table) {

The next step would be to create a model. To generate a model run

php artisan make:model Post

This will create a model Post in app\Models directory

class Post extends Model
use HasFactory;
protected $fillable = [

The next step, to insert records into your database create a factory

As of now, Laravel uses the Faker package to generate fake test data for you. Sadly this package is archived, which means from PHP 8 onwards it will not work. Read here to know more about why this package was discontinued.

Update: After the fzaninotto/Faker package is archived Laravel now uses FakerPHP/Faker forked from fzaninotto/Faker.

php artisan make:factory PostFactory --model=Post

This will create a factory name PostFactory in database\factories directory

class PostFactory extends Factory
protected $model = Post::class;
public function definition()
return [
'title' => $this->faker->sentence,
'content' => $this->faker->paragraph,
'author_id' => $this->faker->numberBetween(1, 100),
'category_id' => $this->faker->numberBetween(1, 10),

The final step is to add the above-created factory in the database seeder, which creates the data when you run database:seed command.

class DatabaseSeeder extends Seeder
public function run()

Now run php artisan migrate:fresh --seed at your will to seed the database with test data.

The source code is available at for you to refer to.

To dig deeper please check Laravel Documentation.

Read the next part, Creating Relationships of this tutorial.

Connect: Twitter, GitHub, Linkedin, MDITech

You can support by buying a coffee ☕️ here

Software Developer @