Black Friday sale is now on! 50% off Laravel: The Modular Way. Learn more

Laravel update factory after creation

David Carr

Laravel Framework

    Using a Laravel factory to create a user and then update a relationship directly is possible using factory callbacks. Using a configure method you can call afterCreating and afterMaking closures:

    <?php
    
    namespace Database\Factories;
    
    use App\Models\Tenant;
    use App\Models\User;
    use Illuminate\Database\Eloquent\Factories\Factory;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Str;
    
    class UserFactory extends Factory
    {
        protected $model = User::class;
    
        public function definition(): array
        {
            return [
                'name'           => $this->faker->name(),
                'slug'           => Str::slug($this->faker->name()),
                'email'          => $this->faker->email(),
                'password'       => Hash::make('password'),
                'is_active'      => 1,
                'remember_token' => Str::random(10),
            ];
        }
    
        public function configure()
        {
            return $this->afterCreating(function (User $user) {
                $user->tenant_id = Tenant::factory()->create([
                    'owner_id' => $user->id
                ]);
                $user->save();
            });
        }
    }
    

    Read more about Factory Callbacks

    Laravel Modules Book by David Carr

    Help support the blog so that I can continue creating new content!

    Subscribe to my newsletter

    Subscribe and get my books and product announcements.

    © 2009 - 2022 DC Blog. All code MIT license. All rights reserved.