Как работают миграции Laravel?

Я совершенно новичок в этом типе фреймворка. Я пришел из базовой разработки PHP, и я не могу найти легкое для понимания руководство, что на самом деле делают миграции.

Я пытаюсь создать проект, в котором уже есть существующая база данных. Я использовал это: https://github.com/Xethron/migrations-generator[1] но внесение изменений в схему с помощью миграции, кажется, выдает ошибки, что означает, что я понятия не имею, что делаю.

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


person Recur    schedule 13.05.2015    source источник
comment
Миграции — это тип контроля версий для вашей базы данных. - Использовали ли вы ранее контроль версий? По сути, это способ перехода от одной конфигурации к другой или обратно к предыдущей версии схемы базы данных.   -  person naththedeveloper    schedule 13.05.2015
comment
Если я добавлю новый столбец в таблицу в версии 1.1.1, то моя миграция создаст новый столбец (известный как «вверх» — переход к следующей версии), а также удалит столбец (известный как «вниз» — переход к предыдущей версии)   -  person naththedeveloper    schedule 13.05.2015
comment
Возможен дубликат? stackoverflow.com/q/23010146/472495   -  person halfer    schedule 13.05.2015


Ответы (3)


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

С миграциями вам не нужно создавать таблицу в phpMyAdmin, вы можете сделать это в Laravel. Вот пример создания пользовательской таблицы:

class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table)
        {
            $table->increments('id'); // autoincrement id field
            $table->string('name');   // string field
            $table->string('lastname');
            $table->string('title');
            $table->string('email')->unique();   // unique string field
            $table->string('password', 60);      // string field with max 60 characters
            $table->boolean('Status')->default(0); // string field with default value 0
            $table->timestamps();

        });
    }


    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }

}

В этом коде мы создаем таблицу с такими полями, как «имя», «фамилия»… мы сказали в нашем коде Laravel, что они строкового типа, когда миграция завершена, у нас есть полная таблица в базе данных с этими полями.

Запустите миграцию для создания таблицы

Чтобы создать миграцию, вы можете использовать команду make:migration в Artisan CLI (интерфейс командной строки artisan):

php artisan make:migration create_users_table

or

php artisan make:migration create_users_table --create=users

Выполнить миграцию для изменения таблицы

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

php artisan make:migration add_votes_to_users_table --table=users

Откатить последнюю операцию переноса

Если вы допустили ошибку и сделали что-то не так, вы всегда можете выполнить откат, чтобы вернуть базу данных в предыдущее состояние.

php artisan migrate:rollback

Отменить все переносы

php artisan migrate:reset

Отменить все переносы и запустить их снова

php artisan migrate:refresh

php artisan migrate:refresh --seed

Одним из лучших преимуществ миграции является создание базы данных без изменения кода SQL. Вы можете создать целую базу данных со связью в PHP-коде, а затем перенести ее в MySQL, PL/SQL, MSSQL или любую другую базу данных.

Также я рекомендую бесплатную фундаментальную серию Laravel 5, в эпизоде ​​7 вы можете узнать больше о миграции.

person Adnan    schedule 13.05.2015
comment
Хороший ответ! Небольшое замечание: могу ли я побеспокоить вас, чтобы вы избегали текстовой речи здесь? Нам нравится, чтобы вопросы были как можно более читаемыми, и мы пытаемся отговорить людей относиться к ним как к чату или форуму. Это недавнее обсуждение этой темы. - person halfer; 13.05.2015
comment
Как насчет использования миграции в существующей базе данных? Вот тут-то и кроется основная беда. - person Recur; 13.05.2015
comment
в существующей базе данных github.com/Xethron/migrations-generator является одним из решений или 1. Создайте пустая база данных 2. Создайте миграцию для каждой таблицы в том порядке, в котором они должны быть созданы (с учетом ключей и т. д.) 3. Добавьте новое соединение с базой данных в файл database.php для старой базы данных (если на другом сервере ) 4. Создайте начальные файлы для извлечения информации из старой базы данных в новую базу данных. - person Adnan; 14.05.2015
comment
Этот ответ, похоже, только что был скопирован из документации, которая, ИМХО, не очень хороша. Что на самом деле делает make:migration, кроме создания файла в базе данных/миграциях? почему, когда в базе данных/миграциях есть файлы, команда migrate:status отвечает, что миграции не найдены? в какой момент создаются миграции? как их запустить, чтобы применить содержащиеся в них изменения? есть ли способ создать начальную миграцию для всех таблиц в моей базе данных? Документы и справочные команды laravel также не объясняют этого: laravel.com/docs/5.4/migrations - person S. Imp; 24.02.2017
comment
Таблица не создается автоматически при вставке данных в перенесенную таблицу. показывает SQLSTATE[42S02]: Base table or view not found: 1146 Table 'expenses.users' doesn't exist - person 151291; 23.03.2017

Простое объяснение миграции:

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

Представьте, что вы настраиваете новое приложение. Первое, что вы делаете, это создаете таблицу (назовите ее mytable) с парой столбцов. Это будет ваша первая миграция. Вы запускаете миграцию (php artisan migrate), когда начинаете работать над своим приложением, и вуаля! У вас есть новая таблица в вашей базе данных.

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

Хорошо, это основная идея миграции. Но есть еще...

Предположим, позже вы понимаете, что ошиблись, когда создавали последнюю миграцию. Вы уже запускали его, поэтому ваша база данных изменилась. Как это исправить? Ну, если вы правильно написали свою миграцию и реализовали метод down, вы можете просто сделать php artisan migrate:rollback и он откатит миграцию.

Как Laravel это делает? Отслеживая ваши миграции в специальной таблице базы данных. Команда php artisan migrate:install настроит все за вас, чтобы Laravel мог управлять этими миграциями.

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

Ознакомьтесь со списком artisan команд с php artisan. Вы также можете запросить помощь по конкретной команде с помощью php artisan help <command>.

person Kryten    schedule 13.05.2015

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

Это может очень быстро и легко выйти из-под контроля. Если вы пропустили какой-то SQL от одного разработчика, SQL другого разработчика может работать некорректно. Это также потенциально может стать огромной тратой времени, пытаясь отсортировать кучу файлов sql, пытаясь выяснить, какие из них вы пропустили. Это только вопрос времени, когда все в команде разработчиков будут работать с разными базами данных или, не дай Бог, кто-то сломает производственную базу данных. При миграции вам просто нужно запустить php artisan migrate в командной строке, и обо всех изменениях в базе данных позаботятся за вас.

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

person user1669496    schedule 13.05.2015