Статьи

Ремесленник и Laravel Миграции

Для тех, кто испытывает трудности с поддержанием схемы своей базы данных, или у кого есть проблемы с применением обновлений и часто их возвращают, есть решение. Laravel, инфраструктура MVC, о которой я писал ранее, предлагает вам миграции.

Короче говоря, миграции — это файлы, которые содержат определение класса с использованием методов up() и down() . Метод up() запускается при выполнении миграции, чтобы применить изменения к базе данных. Метод down() запускается для отмены изменений. Если вам нужно обновить базу данных, вы просто создаете новую миграцию и вуаля. Не доволен этим? Верните его, и вы снова на правильном пути.

Все это выглядит довольно круто, не так ли? Но как это работает для Laravel? Сначала вам нужно настроить соединение с базой данных, а затем вы используете Artisan, интерфейс командной строки Laravel, для установки таблицы миграции и запуска, возврата, создания… миграций.

Откройте консоль и перейдите в корневой каталог вашей установки Laravel. Запустите следующую команду:

  php artisan migrate: установить 

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

Чтобы создать новую миграцию, выполните эту команду:

  php artisan migrate: создайте create_users_table 

Это создает файл миграции, который обрабатывает таблицу пользователей. Вы можете найти свой файл application/migrations папке application/migrations . Artisan добавляет дату и время выполнения команды в качестве префикса к файлу, поэтому имя файла будет выглядеть примерно так: «2012_07_25_071925_create_users_table.php». Обязательно используйте описательное имя, чтобы с первого взгляда было понятно, что делает миграция.

Откройте файл, и вы увидите класс с двумя методами up() и down() .

 <?php class Create_Users_Table { public function up() { Schema::create("users", function($table) { $table->increments("id"); $table->string("username", 32); $table->string("email", 320); $table->string("password", 64); $table->timestamps(); }); } public function down() { Schema::drop("users"); } } 

Метод up() запускается при выполнении миграции и создает таблицу пользователей, которая содержит пять столбцов. Первый — столбец идентификатора с автоинкрементом, за которым следуют столбцы VARCHAR для имени пользователя, адреса электронной почты и пароля. Первый параметр string() — это имя столбца (например, «имя пользователя»), а второй — размер столбца (например, длина 32 символа). Последние столбцы создаются методом timestamps() который создает столбцы «create_at» и «updated_at».

Метод down() проще, чем его предшественник, и просто указывает базе данных удалить таблицу пользователей.

Теперь этот файл не будет ничего делать, если он просто сидит там. Чтобы выполнить все ожидающие миграции, запустите:

  php ремесленник мигрировать 

В настоящее время невозможно выполнить определенную миграцию. Однако вы можете запустить все миграции в папке приложения с помощью команды:

  php artisan перенести приложение 

Вы можете сделать то же самое для определенного пакета, используя ту же команду, но с именем пакета.

Теперь предположим, что вы понимаете, что допустили ошибку проектирования и хотите откатить последний запуск миграции. Просто введите:

  php artisan migrate: откат 

Пока еще невозможно выполнить автоматический откат до точки перед конкретной миграцией, поэтому вам придется многократно запускать команду, пока вы не достигнете этой миграции. Однако вы можете сбросить все миграции, которые вы когда-либо выполняли, просто запустив:

  php artisan migrate: сбросить 

В настоящее время база данных позволяет пользователям регистрировать одно и то же имя пользователя или адрес электронной почты любое количество раз. Мы хотим ограничить это и разрешить использование адреса или имени пользователя только один раз. Конечно, мы не хотим откатывать предыдущую миграцию, потому что в противном случае мы потеряем данные, поэтому вместо этого мы создадим новую.

  php artisan migrate: создайте users_add_username_email 

Метод up() должен добавить уникальный индекс для полей, например так:

 <?php public function up() { Schema::table("users", function($table) { $table->unique("username"); $table->unique("email"); }); } In the <code>down()</code> method, you want simply to remove the indexes. <?php public function up() { $table->drop_unique("username"); $table->drop_unique("email"); } 

Это оно! Я надеюсь, что вы найдете миграцию Laravel решением, позволяющим избежать многих часов боли, которые вы прошли при управлении схемой базы данных. Увидимся в следующий раз!

Изображение через Fotolia