Поиск…


Миграции

Для управления вашей базой данных в Laravel используется миграция. Создание миграции с помощью мастера:

php artisan make:migration create_first_table --create=first_table

Это создаст класс CreateFirstTable. Внутри метода вверх вы можете создать свои столбцы:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFirstTable extends Migration
{
    public function up()
    {
        Schema::create('first_table', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_string_column_name');
            $table->integer('secont_integer_column_name');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('first_table');
    }
} 

В конце, чтобы запустить все ваши классы миграции, вы можете запустить команду artisan:

php artisan migrate

Это создаст ваши таблицы и столбцы в вашей базе данных. Другая полезная команда:

  • php artisan migrate:rollback - php artisan migrate:rollback последней миграции базы данных
  • php artisan migrate:reset - Откат всех миграций баз данных
  • php artisan migrate:refresh - Сбросить и повторно запустить все миграции
  • php artisan migrate:status - показать статус каждой миграции

Изменение существующих таблиц

Иногда вам необходимо изменить существующую структуру таблиц, например, renaming/deleting столбцов. Что вы можете достичь путем создания нового migration.And В up метода миграции.

//Renaming Column.

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('email', 'username');
    });
}

В приведенном выше примере переименуйте email column users table в username . В то время как приведенный ниже код удаляет username users столбца из таблицы users .

IMPROTANT: для изменения столбцов вам нужно добавить зависимость doctrine/dbal к файлу composer.json проекта и запустить composer update чтобы отразить изменения.

//Droping Column
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('username');
    });
}

Файлы миграции

Миграции в приложении Laravel 5 находятся в каталоге database/migrations . Их имена файлов соответствуют определенному формату:

<year>_<month>_<day>_<hour><minute><second>_<name>.php

Один файл миграции должен представлять собой обновление схемы для решения конкретной проблемы. Например:

2016_07_21_134310_add_last_logged_in_to_users_table.php

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

Создание файлов миграции

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

php artisan make:migration add_last_logged_in_to_users_table

Вы также можете использовать флаги --table и --create с приведенной выше командой. Они являются необязательными и только для удобства, и вставьте соответствующий код шаблона в файл миграции.

php artisan make:migration add_last_logged_in_to_users_table --table=users

php artisan make:migration create_logs_table --create=logs

Вы можете указать настраиваемый путь вывода для сгенерированной миграции с --path опции --path . Путь относится к базовому пути приложения.

php artisan make:migration --path=app/Modules/User/Migrations

Внутри миграции базы данных

Каждая миграция должна иметь метод up() метод down() . Цель метода up() - выполнить требуемые операции, чтобы поместить схему базы данных в ее новое состояние, а цель метода down() - отменить любые операции, выполняемые методом up() . Убедиться, что метод down() корректно меняет ваши операции, имеет решающее значение для возможности изменения схемы отката базы данных.

Пример файла миграции может выглядеть следующим образом:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddLastLoggedInToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dateTime('last_logged_in')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_logged_in');
        });
    }
}

При выполнении этой миграции Laravel создаст следующий SQL для работы с вашей базой данных:

ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL

Выполнение миграций

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

php artisan migrate

Если все пойдет хорошо, вы увидите результат, похожий на приведенный ниже:

Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table

Laravel достаточно умен, чтобы знать, когда вы выполняете миграцию в рабочей среде. Если он обнаруживает, что вы выполняете деструктивную миграцию (например, тот, который удаляет столбец из таблицы), команда php artisan migrate попросит вас подтвердить. В условиях непрерывной доставки это может не потребоваться. В этом случае используйте флаг --force чтобы пропустить подтверждение:

php artisan migrate --force

Если вы только запускаете миграцию, вы можете быть смущены, чтобы увидеть наличие таблицы migrations в вашей базе данных. Эта таблица - это то, что Laravel использует для отслеживания того, какие миграции уже выполнены. При выдаче команды migrate Laravel определит, какие миграции еще предстоит выполнить, а затем выполнить их в хронологическом порядке, а затем обновить таблицу migrations .

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

Перемещение назад

Что делать, если вы хотите отменить последнюю миграцию, т.е. недавнюю операцию, вы можете использовать команду awesome rollback . Но помните, что эта команда откатывает только последнюю миграцию, которая может включать в себя несколько файлов миграции

php artisan migrate:rollback

Если вы заинтересованы в откате всех миграций приложений, вы можете использовать следующую команду

php artisan migrate:reset 

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

php artisan migrate:refresh
php artisan migrate:refresh --seed

Вы также можете указать количество шагов для отката с step . Как это будет откат 1 шаг.

php artisan migrate:rollback --step=1


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow