Во время наполнения базы данных,
защита от массового отвода
отключена.
Наполнение
Содержание:
Введение
Laravel включает простой метод наполнения вашей базы данных с тестовыми данными используя
классы сидеров. Все такие классы находятся в папке database/seeds
. Класс сидера
может иметь любое имя по вашему желанию, но будет лучше, чтобы имя соотвествовало некоторой
смысловой конструкции такой как UsersTableSeeder
и другое. По умолчанию,
класс DatabaseSeeder
определён для вас. Их этого класса вы можете использовать
метод call
, чтобы запустить другие классы сидера, что позволяет контролировать
порядок выполнения.
Написание Seeder-ов
Чтобы сгенерировать сидер, выполните команду Artisan make:seeder
.
Все сидеры сгенерированные фреймворком будут располагаться в папке database/seeds
:
php artisan make:seeder UsersTableSeeder
Сидер класс только один метод по умолчанию: run
. Этот метод вызывается при выполнении
команды db:seed
. Внутри метода run
вы можете вставить данные в вашу базу данных
так как вы захотите. Можно использовать конструктор запросов для того, чтобы вставлять данные вручную.
или вы можете и использовать фабрики
моделей Eloquent.
В качестве примера, давайте определим базовый класс DatabaseSeeder
и добавим некоторые параметры ввода в метод run
:
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
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('password'),
]);
}
}
Использование фабрики моделей
Конечно, указывать данные для каждой модели вручную это очень громоздко. Вместо этого, вы можете использовать фабрики моделей для того, чтобы легко сгенерировать большое количество записей для вашей базы данных. Рекомендуется отбратится к документации фабрики моделей, чтобы научиться создавать ваши фабрики. После определения ваших фабрик, вы можете использовать функцию-помощник для вставки записей в базу данных.
Например, давайте создадим 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());
});
}
Вызов дополнительных Seeder-ов
Внутри класса 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
Теперь вы можете использовать команду Артизан db:seed
для наполнения вашей базы.
По умолчанию, команда db:seed
зупускает класс DatabaseSeeder
,
который может использоваться как ссылка на остальные классы сидеры. Однако, вы также можете
использовать опцию --class
для указания класса сидера, который необходимо
запустить:
php artisan db:seed
php artisan db:seed --class=UsersTableSeeder
Вы также можете наполнить вашу базу данных используя команду migrate:refresh
,
которая сначала откатит все ваши миграции, а после выполнит заново. Команда полезна для
полного перепостроения вашей базы данных:
php artisan migrate:refresh --seed
Заставить сидеры выполняться на сервере.
Некоторые операции наполнения могут привести к изменению или потере данных. Чтобы защитить вас
от выполнения команд на сервере, вам будет предложено потвердить команду до её выполнения.
Чтобы заставить выполнение сидеров без потверждения, используйте --force
:
php artisan db:seed --force