Миграции

09 Января 2022 00:19

Миграции - специальные файлы, в которых описывается структура таблиц в базе данных и которые используются для формирования этих таблиц движком Laravel. Находятся в директории database/migrations.

Ссылка на документацию: https://laravel.ru/docs/v5/migrations

Файлы содержат в названии дату создания миграции и название таблицы. Это необходимо для последовательного выполнения миграций т.к. таблицы могут быть связаны.

Каждый файл содержит в себе класс с двумя методами: up и down. В up прописываем правила для создания таблиц, в down правила для удаления таблицы.

В базе данных также есть таблица migrations, в которой хранятся все выполненные миграции, если мы создаем новые миграции и запускаем команду миграций то выполнены будут только последние.

Команды

Создать миграцию для таблицы с именем users.

php artisan make:migration create_users_table

Запустить миграции

php artisan migrate

Примечание. Миграции можно создать заодно с моделями

php artisan make:model Models/BlogCategory -m

Откатить изменения, связанные с последними миграциями

php artisan migrate:rollback

Примечание. Сразу с мигарциями можно выполнять сидирование, добавив флаг --seed.

Следующая команда отменит все миграции, создаст их заново и запустит сиды.

php artisan migrate:refresh --seed

Основные методы

Метод Описание
$table->id(); Создаст поле id с ключом autoincrement и типомbitgInt(20).
$table->increments('id'); Создаст поле id с ключом autoincrement и типом Int(10).
$table->string('name'); Поле с типом varchar(255).
$table->float('summ'); Поле с типом float.
$table->timestamp('time'); Поле с типом timestamp.
$table->text('comment'); Поле с типом text.

Методы-модификаторы

Дополнительные методы, позволяющие указать аттрибуты поля, типа null, unique и т.д. Указываются сразу после основного метода.

Метод Описание
->unique(); Поле будет уникальным (недоступным для записи уже существующего значения)
->nullable(); Возможно, чтобы в поле был записан NULL.
->default($value); Значение по умолчанию для поля.
->comment('comment'); Добавляет комментарий к полю.

Методы-заготовки

Такие методы сразу создают поля с нужными параметрами для определенных целей.

Метод Описание
$table->timestamps(); Создаст 2 поля: 
  1. created_at (timestamp, nullable, по умолчанию: NULL)
  2. updated_at (timestamp, nullable, по умолчанию: NULL)
$table->rememberToken();

Создаст поле:

  1. remember_token (varchar(100), nullable, по умолчанию: NULL)

Индексы

Навешивание индексов для полей.

Примечание. Некотоыре из индексов уже есть в модификаторах, например, unique. Но можно писать их отдельно для читаемости.

Метод Описание
$table->unique('email'); Индекс уникальный.
$table->primary('id'); Индекс первичный.
$table->index('state'); Индекс базовый.

Зависимости

Метод Описание
$table->foreign('user_id')->references('id')->on('users'); Создаст зависимость поля user_id текущей таблицы от поля id в таблице users.

Примечание. Эта мигарция обязательно должна идти после миграции с таблицей users, иначе будет ошибка.