"Наполнение БД тестовыми данными с помощью Factory и Seeder"
При разработке Laravel-приложений часто требуется быстро заполнить базу тестовыми данными.
Laravel предоставляет для этого:
- Seeder;
- Factory;
- Faker.
В этой статье разберём, как эффективно наполнять Laravel database тестовыми данными.
Что такое Laravel Seeder
Seeder — это класс для наполнения базы данных данными.
Создание:
php artisan make:seeder UserSeeder
Seeder появится в:
database/seeders
Пример Seeder
use App\Models\User;
User::create([
'name' => 'Admin',
'email' => 'admin@example.com',
]);
Запуск Seeder
php artisan db:seed
Запуск конкретного Seeder
php artisan db:seed --class=UserSeeder
Что такое Laravel Factory
Laravel factory автоматически генерирует fake-данные.
Создание factory:
php artisan make:factory PostFactory
Пример Factory
use Illuminate\Support\Str;
return [
'title' => fake()->sentence(),
'content' => fake()->text(),
'slug' => Str::slug(fake()->sentence()),
];
Генерация моделей
Post::factory()->count(10)->create();
Factory и Seeder вместе
public function run(): void
{
Post::factory(50)->create();
}
Faker в Laravel
Laravel использует Faker для генерации:
- email;
- телефонов;
- текстов;
- дат;
- URL;
- изображений.
Связанные модели
Factory отлично работает со связями Eloquent.
Пример:
User::factory()
->hasPosts(5)
->create();
State в Factory
Post::factory()->state([
'published' => true,
]);
Factory Sequence
->sequence(
['status' => 'draft'],
['status' => 'published']
)
Seed production данных
Seeder полезны не только для тестов.
Часто через seed создают:
- роли;
- permissions;
- настройки;
- системные данные.
migrate:fresh --seed
Полезная команда:
php artisan migrate:fresh --seed
Она:
- удаляет таблицы;
- запускает migration;
- выполняет seeders.
Лучшие практики Seeder и Factory
Рекомендуется:
- хранить fake data отдельно;
- использовать factories для тестов;
- создавать reusable states;
- разделять production и dev seeders.
Laravel Factory в тестировании
Factories активно используются в:
- feature tests;
- unit tests;
- API tests.
Это ускоряет написание тестов и уменьшает boilerplate.
Итоги
Laravel Seeder и Factory значительно ускоряют разработку.
С их помощью можно:
- быстро наполнять БД;
- тестировать приложение;
- создавать realistic fake data;
- автоматизировать подготовку окружения.
Это один из самых удобных инструментов Laravel ecosystem.