Поиск…
Миграции
Для управления вашей базой данных в 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