Миграции и начальные данные
11.x
.
Почему это важно?
Введение
Миграции – это что-то вроде системы контроля версий для вашей базы данных. Они позволяют команде программистов изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Миграции обычно идут рука об руку с конструктором таблиц для более простого обращения с архитектурой вашего приложения.
Создание миграций
Для создания новой миграции вы можете использовать команду migrate:make
:
php artisan migrate:make create_users_table
Миграция будет помещена в папку app/database/migrations
и будет содержать текущее время, которое позволяет библиотеке определять порядок применения миграций.
Примечание: Старайтесь давать миграциям многословные имена – например, не
comments
, аcreate_comments_table
– так вы избежите возможного конфликта названий классов.
При создании миграции вы можете также передать параметр --path
. Путь должен быть относительным к папке вашей установки Laravel.
php artisan migrate:make foo --path=app/migrations
Можно также использовать параметры --table
и --create
для указания имени таблицы и того факта, что миграция будет создавать новую таблицу, а не изменять существующую.
php artisan migrate:make create_users_table --table=users --create
Применение миграций
Накатывание всех новых неприменённых миграций
php artisan migrate
Накатывание новых миграций, расположенных в указанной папке
php artisan migrate --path=app/foo/migrations
Накатывание новых миграций для пакета
php artisan migrate --package=vendor/package
Внимание: если при применении миграций вы сталкиваетесь с ошибкой “class not found” (“Класс не найден”) – попробуйте выполнить команду
composer dump-autoload
.
Применение миграций на продакшне
Если ошибиться в написании миграций, то можно потерять данные в БД. Поэтому при применении миграций на рабочем сервере (рабочая среда по умолчанию, production) Laravel спрашивает подтверждения операции. Чтобы этого не происходило, например, для применения миграций в автоматическом режиме во время деплоя (загрузки) приложения на сервер, используйте ключ --force
:
php artisan migrate --force
Откат миграций
Отмена изменений последней миграции
php artisan migrate:rollback
Отмена изменений всех миграций
php artisan migrate:reset
Откат всех миграций и их повторное применение
php artisan migrate:refresh
php artisan migrate:refresh --seed
Загрузка начальных данных в БД
Кроме миграций, описанных выше, Laravel также включает в себя механизм наполнения вашей БД начальными данными (seeding) с помощью специальных классов. Все такие классы хранятся в app/database/seeds
. Они могут иметь любое имя, но вам, вероятно, следует придерживаться какой-то логики в их именовании – например, UserTableSeeder
и т.д. По умолчанию для вас уже определён класс DatabaseSeeder
. Из этого класса вы можете вызывать метод call
для подключения других классов с данными, что позволит вам контролировать порядок их выполнения.
Примерные классы для загрузки начальных данных
class DatabaseSeeder extends Seeder {
public function run()
{
$this->call('UserTableSeeder');
$this->command->info('Таблица пользователей заполнена данными!');
}
}
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
User::create(array('email' => 'foo@bar.com'));
}
}
Для добавления данных в БД используйте артизан-команду db:seed
:
php artisan db:seed
По умолчанию команда db:seed
запускает метод run()
класса DatabaseSeeder
. В этом методе вы можете вызывать другие ваши сидеры. Или, вы можете задать название класса, который будет вызван вместо дефолтного:
php artisan db:seed --class=UserTableSeeder
Вы также можете заполнить БД первоначальными данными командой migrate:refresh
, которая перед этим откатит и заново применит все ваши миграции:
php artisan migrate:refresh --seed