Миграции в Laravel

Миграции в Laravel - это набор функций для контроля версии базы данных приложения. Они полезны при наличии большой команды, которая трудится над проектом. Благодаря им все участники разработки в курсе совершённых изменений с базой данных: от изменения структуры таблиц до добавления индексов.

Создание миграции

Для создания миграции используйте команду Artisan под названием "make:migration":
php artisan make:migration create_users_table
Если нужно указать свой путь для создания миграций, то используйте параметр --path при запуске команды "make:migration". Этот путь указыватся относительного баззового пути приложения.
Миграция будет создана в папке database/migrations. К ней будет сохранена метка времени, по которой Laravel поймёт в каком порядке применять миграции.

Если в миграции нужно отметить создание новой таблицы или отметить её имя, то можно использовать параметры "--table" и "--create". Эти параметры создают указанную таблицу в файле миграции:
php artisan make:migration create_users_table --create=users

php artisan make:migration add_votes_to_users_table --table=users

Структура миграций

Миграции содержат методы под названием "up" и "down". Первый используется для добавления таблиц, столбцов и индексов в базу данных. А второй отменяет операции, выполненные первым. Оба метода поддерживают использование построителя структур Laravel.

Приведём пример использования этих методов, создав таблицу "Food":
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFoodTable extends Migration{
   public function up() {
      Schema::create('food', function (Blueprint $table) {
         $table->increments('id');
         $table->string('name');
         $table->string('taste');
         $table->timestamps();
     });
   }

   public function down() {
      Schema::drop('food');
   }
}?>

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

Чтобы запустить все миграции выполните команду Artisan под названием "migrate":
php artisan migrate
Некоторые миграции могут приводить к потере данных. Поэтому для предотвращения случайного запуска таких миграций запрашивается подтверждение на из выполнение. Чтобы отключить подтверждение (и соглашаться со всеми изменениями), можно использовать ключ "--force":
php artisan migrate --force
При появлении ошибки "class not found" выполните команду composer dump-autoload. Затем заново запустите команду "migrate".

Откат миграций

Для отмены внесённых миграцией изменений используется команда "migrate:rollback" и "migrate:reset". Первая делает только откат последней миграции, а вторая откатывает все миграции:
php artisan migrate:rollback

php artisan migrate:reset
Если нужно откатить сразу несколько миграций (но не все), то используйте ключ "--step" для команды rollback. В значение ключа поставьте количество необходимых откатов. К примеру, откат трём миграций:
php artisan migrate:rollback --step=3
Существует ещё команда "migrate:refresh". Она отменяет изменения всех миграций, а затем выполняет команду "migrate". Как и в предыдущем случае, у этой команды есть возможность отката на определённое количество миграций. Оно указывается после ключа "--step". :
php artisan migrate:refresh

php artisan migrate:refresh --step=3

Особенности переименования таблиц

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

Можно управлять ограничениями внешних ключей в миграциях с помощью следующих методов:
<?php
// включает ограничения
   Schema::enableForeignKeyConstraints();

// отключает ограничения
   Schema::disableForeignKeyConstraints();
?>
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб