Сиды: заполнение данными
Сидер — это класс, который наполняет БД данными. Сиды используются для тестовых данных при разработке, справочников, начальных настроек.
Создание
php artisan make:seeder PostSeeder
Файл database/seeders/PostSeeder.php.
Простой сидер
namespace Database\Seeders;
use App\Models\Post;
use Illuminate\Database\Seeder;
class PostSeeder extends Seeder
{
public function run(): void
{
Post::create([
'title' => 'Первый пост',
'body' => 'Текст',
]);
Post::create([
'title' => 'Второй пост',
'body' => 'Текст',
]);
}
}
Массив данных
public function run(): void
{
$posts = [
['title' => 'A', 'body' => 'Text A'],
['title' => 'B', 'body' => 'Text B'],
['title' => 'C', 'body' => 'Text C'],
];
foreach ($posts as $post) {
Post::create($post);
}
}
Массовая вставка
Post::insert($posts);
insert быстрее, но не запускает события модели и не проставляет timestamps.
Идемпотентность
Сидеры должны быть безопасны при повторном запуске. Используй updateOrCreate:
Post::updateOrCreate(
['slug' => 'hello-world'],
['title' => 'Hello World', 'body' => 'Text']
);
DatabaseSeeder
Главный сидер, который вызывает остальные:
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run(): void
{
$this->call([
UserSeeder::class,
PostSeeder::class,
]);
}
}
Запуск
php artisan db:seed # запустить DatabaseSeeder
php artisan db:seed --class=PostSeeder # конкретный сидер
php artisan migrate:fresh --seed # пересоздать БД и засеять
Продакшен
Сиды для продакшена должны быть идемпотентными и содержать только справочные данные, а не тестовые.