Laravel. Миграции базы данных
08.09.2020
Теги: CLI • Laravel • MySQL • БазаДанных • Класс • Миграции • Таблица • Теория • Фреймворк
Миграции — что-то вроде системы контроля версий для базы данных. Они позволяют каждому разработчику в команде изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Для создания новой миграции предназначена Artisan-команда make:migration
:
> php artisan make:migration create_posts_table
Миграция будет помещена в директорию database/migrations
и будет содержать метку времени, которая позволяет фреймворку определять порядок применения миграций. Можно также использовать опции --table
и --create
для указания имени таблицы и того факта, что миграция будет создавать новую таблицу, а не изменять существующую.
> php artisan make:migration create_posts_table --create=posts
> php artisan make:migration add_votes_to_posts_table --table=posts
Класс миграций содержит два метода — up()
и down()
. Метод up()
используется для добавления новых таблиц, столбцов или индексов в БД, а метод down()
просто отменяет операции, выполненные методом up()
.
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Выполнение миграций. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * Отмена миграций. * * @return void */ public function down() { Schema::drop('flights'); } }
Запуск миграций
Для запуска всех необходимых миграций предназначена Artisan-команда migrate
:
> php artisan migrate
Некоторые операции миграций разрушительны и могут привести к потере данных. Для предотвращения случайного запуска этих команд на боевой БД перед их выполнением запрашивается подтверждение. Для принудительного запуска команд без подтверждения предназначена опция --force
:
> php artisan migrate --force
Откат миграций
Для отмены изменений, сделанных последней миграцией, предназаначена команда rollback
. Она отменяет результат последней «партии» миграций, которая может включать несколько файлов миграций:
> php artisan migrate:rollback
Можно выполнить откат определённого числа миграций, указав опцию --step
для команды rollback
:
> php artisan migrate:rollback --step=5
Команда migrate:reset
отменит изменения всех миграций приложения:
> php artisan migrate:reset
Откат и запуск
Команда migrate:refresh
отменит изменения, внесенные каждой миграцией, а затем снова выполнит команду migrate
:
> php artisan migrate:refresh Rolling back: 2020_09_06_104713_create_posts_table Rolled back: 2020_09_06_104713_create_posts_table (0.02 seconds) Rolling back: 2014_10_12_000000_create_users_table Rolled back: 2014_10_12_000000_create_users_table (0.01 seconds) Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.03 seconds) Migrating: 2020_09_06_104713_create_posts_table Migrated: 2020_09_06_104713_create_posts_table (0.05 seconds)
Отменим все изменения, снова выполним команду migrate
и заполним БД тестовыми данными:
> php artisan migrate:refresh --seed
Можно откатить и повторно применить определённое число миграций, используя опцию --step
:
> php artisan migrate:refresh --step=5
Начиная с версии Laravel 5.5 доступна команда fresh
, которая очень похожа на refresh
. Но если refresh
сперва откатывает все миграции с помощью метода down()
, а потом накатывает их снова с помощью метода up()
— то команда fresh
просто удаляет все таблицы БД, а потом накатывает все миграции.
> php artisan migrate:fresh Dropped all tables successfully. Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.03 seconds) Migrating: 2020_09_06_104713_create_posts_table Migrated: 2020_09_06_104713_create_posts_table (0.06 seconds)
- Laravel. Тестовые данные для БД
- Мини-блог на Laravel, часть 1. Создание таблиц БД, наполнение тестовыми данными
- Laravel. Работа с БД. Часть вторая — конструктор запроса
- Laravel. Работа с БД. Часть первая — сырой запрос
- Laravel. Мягкое удаление (soft deletes)
- Мини-блог на Laravel, часть 3. Постраничная навигация, layout-шаблон и поиск по блогу
- Мини-блог на Laravel, часть 2. Создание контроллера, представления и маршрута
Поиск: CLI • Laravel • MySQL • База данных • Класс • Миграции • Таблица • Фреймворк • artisan • Теория