Миграция Laravel: Как проверить существует ли таблица или столбец

Ромчик
0

Доброго времени суток. В одном проекте на Laravel столкнулся c проблемой. Точнее даже не с проблемой, а неприятностью. Необходимо расширить функционал приложения. И вот я приступил. Создал миграцию, которая создавала таблицу, например, messages. Запустил миграцию. И… Ошибка! Такая таблица уже была. Да, я не заметил. Было порядка 50 миграций и порядка 35-40 таблиц. И это я один разработчик. И я представил, какой это кошмар, когда проект большой: несколько сотен таблиц, еще больше миграций и над проектом трудятся с десяток программистов. Поэтому и решил написать эту статью: «Как проверить существования таблицы или столбца в миграции»

Давайте создадим миграцию. Для этого используем artisan команду:


php artisan make:migration create_messages_table --create=messages

Тут мы использовали параметр –create,  который указывает, что мы создаем таблицу и дальше пишем название таблицы.

И вот метод up()


Schema::create('messages', function (Blueprint $table) {

$table->increments('id');

$table->string('title');

$table->text('amessage');

$table->timestamps();

});

И если таблица сообщений уже существует, то миграция не выполнится. Давайте сделаем проверку на существование таблицы messages. Для этого изменим метод up():


public function up()

{

if (!Schema::hasTable('messages')) {

Schema::create('messages', function (Blueprint $table) {

$table->increments('id');

$table->string('title');

$table->text('message');

$table->timestamps();

});

}

}

Тут мы использовали статический метод hasTable в качестве параметра передаем название таблицы. Данный метод проверят существует ли указанная таблица. И если да, то вернет истину, если нет – ложь.

Для того, чтобы проверить существует ли в таблице столбец используется статический метод Scheme::hasColumn(<название таблицы>, <название колонки>). В качестве параметров передаются: название таблицы, в которой ищем колонку и название колонки.

И тогда эти методы мы можем использовать следующим образом:


public function up()

{

if (Schema::hasTable ('messages')) {

Schema::table('messages', function (Blueprint $table) {

if (!Schema::hasColumn('messages', 'user_id')) {

$table->unsignedInteger('user_id');

}

});

}

}

Первое, мы проверили, что таблица messages существует. Затем перешли в таблицу messages для того, чтобы создать новую колонку user_id. Но перед тем, как создавать колонку мы проверили, что она не существует.

Вот и все. Миграции работают. Все довольны.

Заключение.

Мы с вами рассмотрели два метода:

  • Schema::hasTable(), который служит для проверки существования таблицы
  • Schema::hasColumn(), который служит для проверки существования колонки в таблице.
Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger

©2012-2019 По всем вопросам обращайтесь через форму обратной связиПолитика конфиденциальности

Яндекс.Метрика