2016-03-20 3 views
7

Скажем, у меня есть несколько файлов миграции, обновляющих одну таблицу.Laravel migrate - несколько миграций (файлов) за один раз

например.

 
2016_03_20_072730_create_tasks_table.php 
2016_03_20_075467_create_tasks_table.php 

... который пришел с репо разными членами команды. Каждый настраивает что-либо в таблице, например. добавление столбца.

Когда я пытаюсь:

php artisan migrate

Я получаю сообщение об ошибке:

 
PHP Fatal error: Cannot declare class CreateTasksTable, because the name is 
eady in use in U:\www\b10\database\migrations\2016_03_20_072737_create_tasks_ 
le.php on line 30 


    [Symfony\Component\Debug\Exception\FatalErrorException] 
    Cannot declare class CreateTasksTable, because the name is already in use 

Как следует одна сделка с ситуацией, как описано выше?

EDIT

Вот код:

2016_03_20_072730_create_tasks_table.php:

 
class CreateTasksTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::table('tasks', function ($table) 
     { 
      $table->string('task1'); 
     }); 
    } 

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

2016_03_20_075467_create_tasks_table.php:

 
class CreateTasksTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
    Schema::table('tasks', function ($table) 
     { 
      $table->string('task2'); 
     }); 
    } 

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

ответ

7

Каждая миграция должна иметь уникальное имя класса. Переименуйте второй в нечто более разумное, например 2016_03_20_075467_add_task2_to_tasks_table и AddTask2ToTasksTable, затем запустите composer dump-autoload, чтобы Laravel нашел изменения. Теперь вы можете мигрировать.

Редактировать: Теперь, когда оба кода миграции были отредактированы в вопросе, я вижу, что первая миграция имеет одинаковую проблему и должна быть переименована таким же образом. Вероятно, вначале можно создать миграцию. Вы должны перестать называть редактирование миграции чем-либо с create, так как вы фактически не создаете таблицу.

+0

Да, я пришел к такому же выводу из-за ошибки, но миграция должна была быть намного больше, чем выполнение БД вручную. Предположительно вы должны просто получить последнее репо, запустить мигрировать и пиво. Но с этим, похоже, что обходные обновления не так уж далеки от этой «супер-лучшей вещи, поскольку нарезанный хлеб»;) Теперь вам нужно либо настроить файл миграции, объединить файлы миграции, либо переместить их в темп и использовать - -path и т. д. Итак, я думаю, это лимон. Говорит Лоца, маленькая ручка. Если есть простой способ - отсюда мой вопрос. – Jeffz

+0

Это легко - вы просто должны логически назвать свои миграции. Вам не нужно ничего делать в базе данных. Скажем так: работать с моделями очень просто. Но если вы попробуете назвать две модели одинаково, это не сработает. Не могли бы вы утверждать, что с моделями сложно работать? :) Просто научите членов вашей команды давать разные имена для разных миграций, и это буквально все, что вам нужно. –

+1

Файлы миграции автоматически создаются Laravel. Так как есть ярлык создания, было бы так сложно, чтобы Laravel добавил случайную строку/хэш к имени класса? Если только что-то кричит против этой процедуры. Спасибо, Джоэл, за твое время. – Jeffz

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