What is the difference between Factory and Seeder in Laravel?

Better Stack Team
Updated on February 17, 2023

Both Factory and Seeder are used to generate testing data for your application. But there are some differences:


By using factories you can easily create test data for your Laravel application based on your Model. In Factory, we are using other classes or libraries like fzaninotto/faker to generate fake data easily.

In Factory, we can also generate data related to the relationship while in DB Seeder we cannot do that.

// generating data based on model
factory(App\User::class, 50)->create()->each(function ($user) {

Or different example:

use Illuminate\Support\Str;
use Faker\Generator as Faker;

// generating data using Faker
$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => Str::random(10),


Laravel includes the ability to seed your database with data using seed classes. All seed classes are stored in the database/seeders directory. By default, a DatabaseSeeder class is defined for you. From this class, you may use the call method to run other seed classes, allowing you to control the seeding order.

use Illuminate\Support\Str;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use App\Models\User;

class DatabaseSeeder extends Seeder
    public function run(){
Got an article suggestion? Let us know
Explore more
Licensed under CC-BY-NC-SA

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

We are hiring.

Software is our way of making the world a tiny bit better. We build tools for the makers of tomorrow.

Explore all positions →