Удаление таблиц в миграциях в Laravel
Иногда таблица в проекте больше не нужна: функциональность убрали, данные перенесли в другую структуру, учебный пример закончился. Как и с отдельными полями, удаление лучше оформить миграцией - так изменение попадет в историю проекта и дойдет до других разработчиков.
Для удаления таблицы вызывают
метод drop у фасада
Schema. Имя таблицы
передают параметром:
<?php
Schema::drop('posts');
?>
После применения миграции таблица
posts исчезнет из базы
вместе со всеми строками. Если
таблицы уже нет, drop
вернет ошибку.
Чтобы не падать на несуществующей
таблице, используют dropIfExists.
Метод сначала проверит, есть ли
таблица, и только потом удалит:
<?php
Schema::dropIfExists('posts');
?>
dropIfExists удобен в методе
down при откате миграций
и когда структура могла уже
измениться на другой среде.
Пример миграции, которая удаляет таблицу пользователей:
<?php
public function up(): void
{
Schema::dropIfExists('users');
}
public function down(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
?>
В down таблицу создают
заново - откат вернет структуру,
но не вернет удаленные данные.
Перед удалением рабочей таблицы
убедитесь, что она больше не
используется в коде и моделях.
Удалите таблицу с юзерами.
Попробуйте удалить несуществующую
таблицу через drop
и через dropIfExists.
Чем команды отличаются?
Что произойдет с данными в таблице
после drop?