Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pplrPmMgNm 85 of 252 menu
◀ ▶

Имена миграций в 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?

Что произойдет, если имя миграции не подходит ни под один шаблон и флаги не указаны?

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить