Unetway

Laravel - Seeding

Вступление

Laravel включает в себя простой метод заполнения вашей базы данных тестовыми данными с использованием начальных классов. Все начальные классы хранятся в каталоге. Классы семян могут иметь любое имя, которое вы пожелаете, но, вероятно, должны следовать некоторым разумным соглашениям, таким как и т. Д. По умолчанию класс определен для вас. Из этого класса вы можете использовать метод для запуска других начальных классов, что позволяет вам контролировать порядок заполнения.database/seedsUsersTableSeederDatabaseSeedercall

 

Письменные сеялки

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

php artisan make:seeder UsersTableSeeder

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

Массовая защита назначений автоматически отключается при заполнении базы данных.

В качестве примера давайте изменим DatabaseSeederкласс по умолчанию и добавим оператор вставки базы данных в runметод:

<?php

use Illuminate\Support\Str;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

Вы можете напечатать любые зависимости, которые вам нужны, в runсигнатуре метода. Они будут автоматически разрешены через сервисный контейнер Laravel .

 

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

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

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

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    factory(App\User::class, 50)->create()->each(function ($user) {
        $user->posts()->save(factory(App\Post::class)->make());
    });
}

 

Вызов дополнительных сеялок

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

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    $this->call([
        UsersTableSeeder::class,
        PostsTableSeeder::class,
        CommentsTableSeeder::class,
    ]);
}

 

Бегущие сеялки

После того, как вы написали сеялку, вам может потребоваться заново создать автозагрузчик Composer с помощью команды:dump-autoload

composer dump-autoload

Теперь вы можете использовать команду Artisan для заполнения вашей базы данных. По умолчанию команда запускает класс, который может использоваться для вызова других начальных классов. Однако вы можете использовать эту опцию, чтобы указать конкретный класс сеялки для индивидуального запуска:db:seeddb:seedDatabaseSeeder--class

php artisan db:seed

php artisan db:seed --class=UsersTableSeeder

Вы также можете заполнить свою базу данных с помощью команды, которая также откатит и перезапустит все ваши миграции. Эта команда полезна для полной перестройки вашей базы данных:migrate:refresh

php artisan migrate:refresh --seed