When you work on a project, it's IMPORTANT to seed fake data into the database to save your time. No issue when seeding a model that has no relation with another model, but it's so sensitive to seeding a model that is based on another, because the data must be fairly real. Come on to take a closer look at these scenarios
 
Imagine that we want to seed the `posts` table with fake data, actually, we will use one of the following ways:
 
/**
 * Define the model's default state.
 *
 * @return array<string, mixed>
 */
public function definition(): array
{
    return [
        'title'      => fake()->text(20),
        'body'       => fake()->paragraph(),
        'is_visible' => fake()->boolean(),
        // A first way to get random user
        'user_id'    => User::inRandomOrder()->first()->id,
        // A second way to get random user
        // 'user_id'    => User::all()->random()->id,
    ];
}
 
In the previous code, we seeded the `user_id` column with a random value from an existing user
 
We should seed the `users` table first and then seed the `posts` table.
 
There is another way, where we create a new user for each new post:
 
/**
 * Define the model's default state.
 *
 * @return array<string, mixed>
 */
public function definition(): array
{
    return [
        'title'      => fake()->text(20),
        'body'       => fake()->paragraph(),
        'is_visible' => fake()->boolean(),
        'user_id'    => User::factory(),
    ];
}
 
For the previous two ways, we will write the following code in the `DatabaseSeeder.php` class to seed the `posts` table:
 
/**
 * Seed the application's database.
 */
public function run(): void
{
    // A first way to seed the `posts` table
    Post::factory(10)->create();
    // A second way to seed the `posts` table
    // Post::factory()
    //     ->count(10)
    //     ->create();
}
 
In these ways, we always assign a different user per post.
 
But, what if we need to seed the `users`, `posts`, and `images` tables, where these tables are related to each other, and the User who created a Post is the same as who uploaded the post's Image here, we should seed the same user for each post and image that is created
 
In such a scenario, we need a method, such as a recycling method:
 
/**
 * Seed the application's database.
 */
public function run(): void
{
    Image::factory()
        ->recycle(User::factory()->create())
        ->create();
}