Artisan и Laravel миграции

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

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

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

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

php artisan migrate:install

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

Для создания новой миграции, выполните следующую команду:

php artisan migrate:make create_users_table

Это создает файл переноса, который обрабатывает таблицы пользователей. Вы можете найти файл миграции внутри приложения/папка миграции. 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()  работает, когда миграция выполняется и создает таблицу, которая имеет пять столбцов. Первый автоинкрементный ID столбца, а затем по столбцам VARCHAR ввести имя пользователя, адрес электронной почты и пароль. Первый параметр string() является имя столбца (например, «Имя пользователя»), а второй размер столбца (например, 32 символов). Окончательный столбцы создаются временной метод timestamps(), который создает «created_at» и «updated_at» столбцы.

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

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

php artisan migrate

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

php artisan migrate application

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

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

php artisan migrate:rollback

Не возможно автоматически откатить к точке до определенной миграции, так что вам придется выполнить команду несколько раз, пока вы достигнете, нужную миграцию. И, Вы можете сбросить все миграций, которые вы когда-либо были, командой:

php artisan migrate:reset

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

php artisan migrate:make users_add_username_email

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

unique("username");
        $table->unique("email");
    });
}
В down() метод удаления индексов.
<?php public function up() {
    $table->drop_unique("username");
    $table->drop_unique("email");
}