Laravel. Миграции базы данных

08.09.2020

Теги: CLILaravelMySQLБазаДанныхКлассМиграцииТаблицаТеорияФреймворк

Миграции — что-то вроде системы контроля версий для базы данных. Они позволяют каждому разработчику в команде изменять структуру БД, в то же время оставаясь в курсе изменений других участников. Для создания новой миграции предназначена 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)

Поиск: CLI • Laravel • MySQL • База данных • Класс • Миграции • Таблица • Фреймворк • artisan • Теория

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.