Коллбэки фабрики модели в Laravel
Иногда после сохранения модели нужно сделать ещё шаг: создать профиль, записать настройки или прикрепить файл. Для этого в фабрике используют коллбэки.
Коллбэки задают в методе
configure класса фабрики.
afterCreating срабатывает
после create:
<?php
use App\Models\User;
public function configure(): static
{
return $this->afterCreating(function (User $user) {
$user->profile()->create([
'bio' => fake()->sentence(),
]);
});
}
?>
Теперь каждый вызов
User::factory()->create()
создаст пользователя и связанный
профиль. При make коллбэк
не выполняется - записи в базе
ещё нет.
Коллбэк можно повесить и на конкретный вызов, без изменения класса фабрики:
<?php
User::factory()
->afterCreating(function (User $user) {
// дополнительная логика
})
->create();
?>
Есть также afterMaking -
он срабатывает после make
и create, когда объект
модели уже собран, но до или
после сохранения в зависимости
от метода.
Коллбэки в классе фабрики удобны, когда дополнительное действие нужно при каждом создании записи этого типа.
Добавьте afterCreating,
который создает профиль
для каждого нового пользователя.
Почему afterCreating
не срабатывает при make?