Команда db:seed
Команда db:seed запускает механизм наполнения базы данных через seed-классы. Она может выполняться как для всех сидов, так и для одного конкретного класса с помощью опции --class. По умолчанию команда запускает класс DatabaseSeeder, который обычно используется как точка входа для вызова остальных сидов. При использовании опции --force команда выполняется в продакшн-окружении без подтверждения.
Синтаксис
php artisan db:seed
php artisan db:seed --class=UsersTableSeeder
php artisan db:seed --force
Пример
Выполним команду для запуска всех сидов, определенных в методе run класса DatabaseSeeder:
<?php
namespace DatabaseSeeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
DB::table('users')->insert([
'name' => 'Admin',
'email' => 'admin@example.com',
'password' => Hash::make('password'),
]);
}
}
?>
Запуск команды:
php artisan db:seed
Результат выполнения кода:
"Database seeding completed successfully."
В результате в таблице users появится одна запись с данными администратора.
Пример
Рассмотрим случай, когда нужно выполнить только один конкретный сид для таблицы категорий:
<?php
namespace DatabaseSeeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class CategorySeeder extends Seeder
{
public function run(): void
{
$categories = ['Technology', 'Science', 'Art', 'Sports'];
foreach ($categories as $category) {
DB::table('categories')->insert([
'name' => $category,
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
?>
Команда для запуска только этого сида:
php artisan db:seed --class=CategorySeeder
Результат выполнения кода:
"Database seeding completed successfully."
После выполнения в таблице categories появятся четыре записи с названиями категорий.
Пример
Используем сиды с фабриками для генерации множества тестовых записей. Создадим 10 пользователей и для каждого по 3 статьи:
<?php
namespace DatabaseSeeders;
use Illuminate\Database\Seeder;
use App\Models\User;
use App\Models\Article;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
User::factory()
->count(10)
->has(Article::factory()->count(3))
->create();
}
}
?>
Запуск команды с отключением проверки внешних ключей для продакшн-окружения:
php artisan db:seed --force
Результат выполнения кода:
"Database seeding completed successfully. Seeded: 10 users, 30 articles."
Команда создаст 10 пользователей и для каждого по 3 статьи, всего 40 записей в базе данных.
Пример
Выполним команду с использованием файла сидов, который вызывает другие сиды для комплексного наполнения:
<?php
namespace DatabaseSeeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
$this->call([
UserSeeder::class,
CategorySeeder::class,
ArticleSeeder::class,
CommentSeeder::class,
]);
}
}
?>
Команда для запуска:
php artisan db:seed
Результат выполнения кода:
"Seeding: UserSeeder"
"Seeding: CategorySeeder"
"Seeding: ArticleSeeder"
"Seeding: CommentSeeder"
"Database seeding completed successfully."
Этот подход позволяет структурировать наполнение базы, разделяя логику по разным классам.
Смотрите также
-
команда
make:seeder,
которая создает новый класс сидера -
команда
migrate,
которая выполняет миграции и создает структуру таблиц -
команда
migrate:fresh,
которая удаляет все таблицы и выполняет миграции заново -
команда
make:factory,
которая создает фабрику для генерации тестовых данных