# What is the difference between Factory and Seeder in Laravel?

Both Factory and Seeder are used to generate testing data for your application. But there are some differences:

## Factory

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.

```php
// generating data based on model
factory(App\User::class, 50)->create()->each(function ($user) {
        $user->posts()->save(factory(App\Post::class)->make());
});
```

Or different example:

```php
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),
    ];
});
```

## Seeder

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.

```php
use Illuminate\Support\Str;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use App\Models\User;

class DatabaseSeeder extends Seeder
{
    public function run(){
		    User::factory()
		            ->count(50)
		            ->hasPosts(1)
		            ->create();
		}
}
```

[ad-uptime]