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