Любите загадки? Событие еще доступно на сайте.
Примите наш вызов и улучшите свои навыки!
Примите наш вызов и улучшите свои навыки!

База данных: загрузка начальных данных

Введение

У Laravel есть простой механизм наполнения вашей БД начальными данными с помощью специальных классов. Все такие классы хранятся в директории database/seeds. Они могут иметь любое имя, но вам, вероятно, следует придерживаться какой-то логики в их именовании — например, UsersTableSeeder, и т.д. По умолчанию для вас уже определён класс DatabaseSeeder. Из этого класса вы можете вызывать метод call для подключения других классов с данными, что позволит вам контролировать порядок их выполнения.

Создание начальных данных

Для добавления данных в БД используйте Artisan-команду make:seeder. Все начальные данные, сгенерированные фреймворком, будут помещены в директорию database/seeds:

php artisan make:seeder UsersTableSeeder

Класс начальных данных по умолчанию содержит в себе только один метод: run. Этот метод вызывается, когда выполняется Artisan-команда db:seed. В методе run вы можете вставить любые данные в БД. Можно использовать конструктор запросов , чтобы вручную вставить данные. Также можно воспользоваться фабриками моделей Eloquent.

В качестве примера давайте модифицируем стандартный класс DatabaseSeeder и добавим оператор вставки в БД в метод run:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * Загрузка начальных данных.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

Использование фабрик моделей

Конечно, ручное определение признаков для каждой модели начальных данных – довольно сложный процесс. Вместо этого вы можете использовать фабрики моделей для быстрой генерации больших объёмов данных. Во-первых, пересмотрите документацию по фабрикам моделей , чтобы изучить, как определяются фабрики. Как только вы определите свои фабрики, вы можете использовать хелпер factory , чтобы вставлять записи в вашу базу данных.

Например, давайте создадим 50 пользователей и привяжем отношения к каждому пользователю:

/**
 * Загрузка начальных данных.
 *
 * @return void
 */
public function run()
{
    factory(App\User::class, 50)->create()->each(function ($u) {
        $u->posts()->save(factory(App\Post::class)->make());
    });
}

Вызов дополнительной загрузки начальных данных

В классе DatabaseSeeder вы можете использовать метод call , чтобы запустить дополнительные классы загрузки. Использование метода call позволяет вам разбить свою загрузку начальных данных на несколько файлов, чтобы ни один отдельный класс загрузки не разрастался. Просто передайте название класса загрузки, который вы хотите выполнить:

/**
 * Загрузка начальных данных.
 *
 * @return void
 */
public function run()
{
    $this->call(UsersTableSeeder::class);
    $this->call(PostsTableSeeder::class);
    $this->call(CommentsTableSeeder::class);
}

Запуск загрузки начальных данных

Как только вы написали свои классы загрузки, вы можете использовать Artisan-команду db:seed для запуска загрузки. По умолчанию команда db:seed вызывает класс DatabaseSeeder , который может быть использован для вызова других классов, заполняющих БД данными. Однако, вы можете использовать параметр --class для указания конкретного класса для вызова:

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

Вы также можете использовать для заполнения БД данными команду migrate:refresh, которая также откатит и заново применит все ваши миграции:

php artisan migrate:refresh --seed