2015-05-13 4 views
5

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

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

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

+1

Миграции - это тип контроля версий для вашей базы данных. - Раньше вы использовали контроль версий? Это по существу способ перехода от одной конфигурации к другой или обратно к предыдущей версии того, как была создана схема базы данных. – naththedeveloper

+0

Если я добавлю новый столбец в таблицу в версии 1.1.1, то моя миграция создаст новый столбец (известный как «вверх» - переход к следующей версии), а также удалите столбец (известный как «вниз» - переход к предыдущей версии) – naththedeveloper

+0

Возможный дубликат? http://stackoverflow.com/q/23010146/472495 – halfer

ответ

9

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

С миграциями вам не нужно создавать таблицу в 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 они строкового типа, когда миграция выполняется у нас есть полная таблица в databese с этими полями.

Выполнить миграцию, чтобы создать таблицу

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

php artisan make:migration create_users_table 

или

php artisan make:migration create_users_table --create=users 

Выполнить migratio п изменить таблицу

Когда вам нужно сделать некоторые изменения в примере таблицы базы данных: добавить поле голосования в таблице пользователей вы можете сделать, как это в вашем коде 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 fundamental series, в эпизоде ​​7 вы можете услышать больше о миграции.

+0

Хороший ответ! Незначительный придир: хотя я могу не беспокоить вас, чтобы избежать текстового выступления здесь? Нам нравятся вопросы, которые могут быть как можно более читабельными, и старайтесь препятствовать тому, чтобы люди рассматривали его как чат или форум. [Это недавняя дискуссия] (http://meta.stackoverflow.com/q/293779/472495) по этой теме. – halfer

+0

Как использовать миграцию в существующей базе данных? Вот основная проблема: – Recur

+1

на существующей базе данных https://github.com/Xethron/migrations-generator является одним из решений или 1. Создайте пустую базу данных 2. Создайте миграцию для каждой таблицы в том порядке, в котором они необходимо создать (с учетом ключей и т. д.) 3. Добавить новое соединение с базой данных в файл database.php для старой базы данных (если на другом сервере) 4. Создавать файлы семян для извлечения информации из старой базы данных к новой базе данных. – Adnan

0

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

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

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

Спустя некоторое время вы решите, что вам нужен новый столбец в вашей таблице. Вы создаете миграцию (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>.

0

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

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

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

Смежные вопросы