Через трейт WithoutModelEvents у сідері.
class UserSeeder extends Seeder
{
use WithoutModelEvents;
public function run(): void
{
User::factory()->count(1000)->create();
}
}
Без нього кожен створений користувач запускає спостерігачів: вітальний лист, запис в аналітику, синхронізацію з CRM. Тисяча тестових користувачів - тисяча листів, а локально ще й довге очікування.
Деталі:
- трейт діє й на сідери, викликані через
$this->call(); DatabaseSeederу свіжому застосунку вже має цей трейт;- для частини коду -
Model::withoutEvents(fn () => ...).
Підводний камінь: якщо на подіях моделі тримається обов'язкова логіка - генерація UUID, slug, денормалізований лічильник, - вона теж не спрацює. Такі значення задають у фабриці явно або виносять з подій у мутатори й значення за замовчуванням.
Для повної ізоляції від зовнішнього світу під час локального сідування допомагає ще й MAIL_MAILER=log у .env.