Имена миграций в Laravel
При создании миграции мы уже видели,
что имя create_posts_table
не просто подпись файла. Laravel
разбирает название и подставляет
в заготовку нужный код - создание
таблицы или её изменение.
Имя должно соответствовать сути
изменения. Тогда фреймворк поймет,
какую таблицу затрагивает миграция,
и сгенерирует методы up
и down с правильным вызовом
Schema::create или
Schema::table.
Создание таблицы
Для создания новой таблицы имя
строят по шаблону
create_имя_таблицы_table:
php artisan make:migration create_users_table
Laravel создаст заготовку примерно с таким кодом:
<?php
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
?>
Изменение таблицы
Для изменения существующей таблицы
в имени указывают, что именно меняют,
и через какое слово связано имя таблицы:
to, in или from.
Добавление поля:
php artisan make:migration add_status_to_users_table
Laravel создаст заготовку примерно с таким кодом:
<?php
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
});
}
?>
Изменение поля:
php artisan make:migration change_status_in_users_table
Laravel создаст заготовку примерно с таким кодом:
<?php
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
});
}
?>
Удаление поля:
php artisan make:migration drop_status_from_users_table
Laravel создаст заготовку примерно с таким кодом:
<?php
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
});
}
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
});
}
?>
Имя без суффикса _table
Суффикс _table в конце можно
опустить. Главное - сохранить
общий шаблон имени:
php artisan make:migration create_users
Laravel создаст заготовку примерно с таким кодом:
<?php
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('users');
}
?>
Флаги --create и --table
Если имя не подходит ни под один
шаблон, Laravel создаст пустую
заготовку. Можно явно указать таблицу
флагами --create или
--table:
php artisan make:migration init_posts --create=posts
Laravel создаст заготовку примерно с таким кодом:
<?php
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
?>
Изменение таблицы через флаг
--table:
php artisan make:migration update_posts --table=posts
Laravel создаст заготовку примерно с таким кодом:
<?php
public function up(): void
{
Schema::table('posts', function (Blueprint $table) {
});
}
public function down(): void
{
Schema::table('posts', function (Blueprint $table) {
});
}
?>
Практические задачи
Какое имя подойдет для миграции,
которая создает таблицу comments?
Какое имя подойдет для миграции,
которая добавляет поле email
в таблицу users?
Чем отличаются шаблоны
create_*_table и
add_*_to_*_table?
Какое имя подойдет для миграции,
которая удаляет поле status
из таблицы users?
Какое имя подойдет для миграции,
которая меняет поле title
в таблице posts?
Подойдет ли имя create_products
для миграции, создающей таблицу
products? Почему?
Какую команду выполнить, если
нужна миграция с именем
init_users, которая создает
таблицу users?
Какую команду выполнить, если
нужна миграция с именем
update_posts, которая
меняет таблицу posts?
Какой метод фасада Schema
Laravel подставит в заготовку
для create_users_table,
а какой - для
add_email_to_users_table?
Что произойдет, если имя миграции не подходит ни под один шаблон и флаги не указаны?