{{TOC}} {{DOCVER 5.3=c06d6a2352ed8c767633aab9c20f2bf7d880c967 28.01.2017 5:00:51, 5.2=6b0b057ae6de3c88cb29188459e38383c622ec23 8.12.2016 23:00:15, 5.1=cdc24ba7426c5b11eb4d050706bd78c3ea4913cc 19.06.2016 20:08:01}} == Введение == У Laravel есть простой механизм наполнения вашей БД начальными данными (seeding) с помощью специальных классов. Все такие классы хранятся в каталоге %%(t)database/seeds%%. Они могут иметь любое имя, но вам, вероятно, следует придерживаться какой-то логики в их именовании — например, %%(t)UserTableSeeder%% и т.д. По умолчанию для вас уже определён класс %%(t)DatabaseSeeder%%. Из этого класса вы можете вызывать метод %%call()%% для подключения других классов с данными, что позволит вам контролировать порядок их выполнения. == Создание начальных данных == Для добавления данных в БД используйте ((/docs/v5/artisan Artisan-команду)) %%(sh)make:seeder%%. Все начальные данные, сгенерированные фреймворком, будут помещены в папке %%(t)database/seeds%% (для версии 5.1 - %%(t)database/seeders%%): %%(sh) php artisan make:seeder UsersTableSeeder %% Класс начальных данных содержит в себе только один метод по умолчанию - %%run()%%. Этот метод вызывается, когда выполняется ((/docs/v5/artisan Artisan-команда)) %%(sh)db:seed%%. В методе %%run()%% вы можете вставить любые данные в БД. Вы можете использовать ((/docs/v5/queries конструктор запросов)), чтобы вручную вставить данные. Также можно воспользоваться ((/docs/v5/database-testing#создание фабриками Eloquent моделей)). В качестве примера давайте модифицируем стандартный класс %%(t)DatabaseSeeder%% и добавим оператор вставки в БД в метод %%run()%%: %% insert([ 'name' => str_random(10), 'email' => str_random(10).'@gmail.com', 'password' => bcrypt('secret'), ]); } } %% === Использование фабрик моделей === Конечно, ручное определение признаков для каждой модели начальных данных затруднительно. Вместо этого вы можете использовать ((/docs/v5/database-testing#создание фабрики моделей)) для быстрой генерации больших объёмов данных. Во-первых, пересмотрите ((/docs/v5/database-testing#создание документацию по фабрике моделей)), чтобы изучить, как определяются фабрики. Как только вы определите свои фабрики, вы можете использовать вспомогательную функцию %%factory()%%, чтобы вставлять записи в вашу базу данных. Например, давайте создадим 50 пользователей и привяжем отношения к каждому из них: %% /** * Загрузка начальных данных. * * @return void */ public function run() { factory(App\User::class, 50)->create()->each(function ($u) { $u->posts()->save(factory(App\Post::class)->make()); }); } %% === Вызов дополнительной загрузки начальных данных === В классе %%(t)DatabaseSeeder%% вы можете использовать метод %%call()%%, чтобы запустить дополнительные классы загрузки. Использование метода %%call()%% позволяет вам разбить свою загрузку начальных данных на несколько файлов, чтобы ни один отдельный класс загрузки не разрастался. Просто передайте название класса загрузки, который вы хотите выполнить: %% /** * Загрузка начальных данных. * * @return void */ public function run() { //для версии 5.1: //Model::unguard(); $this->call(UsersTableSeeder::class); $this->call(PostsTableSeeder::class); $this->call(CommentsTableSeeder::class); //для версии 5.1: //Model::reguard(); } %% == Запуск загрузки начальных данных == Как только вы написали свои классы загрузки, вы можете использовать Artisan-команду %%(sh)db:seed%% для запуска загрузки. По умолчанию команда %%(sh)db:seed%% вызывает класс %%(t)DatabaseSeeder%%, который может быть использован для вызова других классов, заполняющих БД данными. Однако, вы можете использовать параметр %%(sh)--class%% для указания конкретного класса для вызова: %%(sh) php artisan db:seed php artisan db:seed --class=UsersTableSeeder //для версии 5.1: //php artisan db:seed --class=UserTableSeeder %% Вы также можете использовать для заполнения БД данными команду %%(sh)migrate:refresh%%, которая также откатит и заново применит все ваши миграции: %%(sh) php artisan migrate:refresh --seed %%