Версія фреймворка: 8.x

База даних: Seeds

Вступ

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

Написання Seeders

Щоб створити сіялку, виконайтеmake:seederartisan командування. Усі сівалки, створені в рамках, будуть розміщені вdatabase/seedersкаталог:

php artisan make:seeder UserSeeder

Клас сівалки містить лише один метод за замовчуванням:run. Цей метод викликається, колиdb:seedartisan командуваннявиконується. У межах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
{
    /**
     * Run the database seeders.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@gmail.com',
            'password' => Hash::make('password'),
        ]);
    }
}
Ви можете ввести натяк на будь-які залежності, які вам потрібні в межахrunпідпис методу. Вони будуть автоматично вирішені через Laravelслужбовий контейнер.

Використання модельних Factories

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

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

use App\Models\User;

/**
 * Run the database seeders.
 *
 * @return void
 */
public function run()
{
    User::factory()
            ->times(50)
            ->hasPosts(1)
            ->create();
}

Виклик додаткових Seeders

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

/**
 * Run the database seeders.
 *
 * @return void
 */
public function run()
{
    $this->call([
        UserSeeder::class,
        PostSeeder::class,
        CommentSeeder::class,
    ]);
}

Запуск Seeders

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

php artisan db:seed

php artisan db:seed --class=UserSeeder

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

php artisan migrate:fresh --seed

Примушення Seeders до запуску у виробництво

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

php artisan db:seed --force