База даних: Наповнення даними

Вступ

Laravel включає можливість заповнювати вашу базу даних даними за допомогою класів заповнювачів. Усі класи заповнювачів зберігаються в директорії database/seeders. За замовчуванням для вас визначено клас DatabaseSeeder. З цього класу ви можете використовувати метод call для запуску інших класів заповнювачів, що дозволяє вам контролювати порядок заповнення.

Захист від масового призначення автоматично вимикається під час засівання бази даних.

Написання Наповнювачів

Щоб згенерувати наповнювач, виконайте команду make:seeder Artisan command. Усі наповнювачі, згенеровані фреймворком, будуть розміщені в директорії database/seeders:

php artisan make:seeder UserSeeder

Клас сівалки за замовчуванням містить лише один метод: run. Цей метод викликається, коли виконується db:seed Artisan команда. У методі run ви можете вставляти дані в вашу базу даних так, як вам зручно. Ви можете використовувати конструктор запитів для ручного вставлення даних або можете використовувати фабрики моделей Eloquent.

Наприклад, давайте змінимо клас DatabaseSeeder за замовчуванням і додамо оператор вставки в базу даних до методу run:

<?php
 
namespace Database\Seeders;
 
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
 
class DatabaseSeeder extends Seeder
{
    /**
     * Запустіть сівалки бази даних.
     */
    public function run(): void
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@example.com',
            'password' => Hash::make('password'),
        ]);
    }
}

Ви можете вказати тип будь-яких залежностей, які вам потрібні, у сигнатурі методу run. Вони будуть автоматично вирішені через Сервіс-контейнер Laravel.

Використання Фабрик Моделей

Звичайно, вручну вказувати атрибути для кожного насіння моделі є громіздким. Натомість ви можете використовувати фабрики моделей для зручного генерування великої кількості записів у базі даних. Спочатку перегляньте документацію фабрик моделей, щоб дізнатися, як визначити ваші фабрики.

Наприклад, давайте створимо 50 користувачів, кожен з яких має один пов'язаний пост:

use App\Models\User;
 
/**
 * Запустіть сидери бази даних.
 */
public function run(): void
{
    User::factory()
        ->count(50)
        ->hasPosts(1)
        ->create();
}

Виклик Додаткових Сівалок

У класі DatabaseSeeder ви можете використовувати метод call для виконання додаткових класів сівалок. Використання методу call дозволяє розбити засів бази даних на декілька файлів, щоб жоден клас сівалки не став занадто великим. Метод call приймає масив класів сівалок, які повинні бути виконані:

/**
 * Запустіть сидери бази даних.
 */
public function run(): void
{
    $this->call([
        UserSeeder::class,
        PostSeeder::class,
        CommentSeeder::class,
    ]);
}

Вимкнення Подій Моделі

Під час запуску сидів, ви можете захотіти запобігти відправленню подій моделями. Ви можете досягти цього, використовуючи трейд WithoutModelEvents. Коли використовується трейд WithoutModelEvents, це гарантує, що жодні події моделі не будуть відправлені, навіть якщо додаткові класи сидів виконуються через метод call:

<?php
 
namespace Database\Seeders;
 
use Illuminate\Database\Seeder;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
 
class DatabaseSeeder extends Seeder
{
    use WithoutModelEvents;
 
    /**
     * Запустіть сидери бази даних.
     */
    public function run(): void
    {
        $this->call([
            UserSeeder::class,
        ]);
    }
}

Запуск Сівалок

Ви можете виконати команду Artisan db:seed для заповнення вашої бази даних. За замовчуванням, команда db:seed запускає клас Database\Seeders\DatabaseSeeder, який може викликати інші класи заповнювачів. Однак, ви можете використовувати опцію --class, щоб вказати конкретний клас заповнювача для індивідуального запуску:

php artisan db:seed
 
php artisan db:seed --class=UserSeeder

Ви також можете наповнити вашу базу даних, використовуючи команду migrate:fresh у поєднанні з опцією --seed, яка видалить всі таблиці та повторно виконає всі ваші міграції. Ця команда корисна для повного відновлення вашої бази даних. Опція --seeder може бути використана для вказівки конкретного наповнювача для виконання:

php artisan migrate:fresh --seed
 
php artisan migrate:fresh --seed --seeder=UserSeeder

Примусове виконання наповнювачів у виробничому середовищі

Деякі операції наповнення можуть призвести до зміни або втрати даних. Щоб захистити вас від виконання команд наповнення проти вашої продуктивної бази даних, вам буде запропоновано підтвердження перед виконанням наповнювачів у середовищі production. Щоб примусово виконати наповнювачі без запиту, використовуйте прапорець --force:

php artisan db:seed --force