Класс Seeder
Класс Seeder в Laravel предназначен для наполнения базы данных тестовыми или начальными данными. Все сидеры наследуются от базового класса Seeder и должны реализовывать метод run, в котором описывается логика вставки данных. Сидеры удобно использовать для создания демонстрационных данных, начальных настроек или для наполнения базы перед тестированием.
Синтаксис
<?php
namespace DatabaseSeeders;
use IlluminateDatabaseSeeder;
use AppModelsArticle;
use IlluminateSupportFacadesDB;
class ArticleSeeder extends Seeder
{
public function run(): void
{
// логика заполнения
}
}
Пример
Давайте создадим сидер для наполнения таблицы articles тестовыми записями:
<?php
namespace DatabaseSeeders;
use IlluminateDatabaseSeeder;
use AppModelsArticle;
use IlluminateSupportStr;
class ArticleSeeder extends Seeder
{
public function run(): void
{
for ($i = 1; $i <= 5; $i++) {
Article::create([
'title' => 'Article ' . $i,
'content' => 'Content for article ' . $i,
'status' => 'published',
'views' => $i * 10,
]);
}
}
}
Для выполнения сидера используйте команду:
php artisan db:seed --class=ArticleSeeder
Пример
Использование фабрик для генерации случайных данных в сидере:
<?php
namespace DatabaseSeeders;
use IlluminateDatabaseSeeder;
use AppModelsArticle;
use AppModelsUser;
use IlluminateSupportStr;
class ArticleSeeder extends Seeder
{
public function run(): void
{
$users = User::all();
foreach ($users as $user) {
Article::factory()
->count(3)
->for($user)
->create();
}
}
}
Пример
Вызов нескольких сидеров из главного сидера базы данных:
<?php
namespace DatabaseSeeders;
use IlluminateDatabaseSeeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
$this->call([
UserSeeder::class,
CategorySeeder::class,
ArticleSeeder::class,
]);
}
}
Запуск всех сидеров выполняется командой:
php artisan db:seed