2015-09-07 2 views
1

Я работаю над своим первым проектом с использованием laravel 5. Все мои скрипты миграции создают таблицы, кроме тех, которые добавили ограничение внешнего ключа после этого (так что обе таблицы находятся на месте до запуска). Я обнаружил ошибку в одном из моих сценариев миграции (отсутствующее поле с полями, не имеющее значения null, вместо значения NULL), поэтому после исправления я попытался выполнить миграцию php artisan: обновитьВ странном состоянии с внешним ключом после ошибки миграции

Я ударил несколько ошибок, поэтому я (ошибочно) решил добраться до свежего состояния пути отбрасывания таблиц (с использованием PostgreSQL Studio, с помощью Heroku), но теперь я застрял в странном состоянии:

  • Когда я пытаюсь PHP ремесленник перенастройки или PHP мастеровые мигрируют - -force, он говорит «Ничего мигрировать».
  • , но при попытке откатить или сбросить или обновить, я получаю сообщение об ошибке: Неопределенное таблица: отношение «пользователи» не существует (SQL: изменить таблицу «пользователи» падение ограничение person_id)

Это ошибка от этого один миграционного скрипта, который добавляет иностранные кнопочный я получил общий синтаксис от здесь- (http://laravel.com/docs/5.0/schema#foreign-keys)- кричать, если не так:

class AddConstraintToUsers extends Migration 
{ 
    public function up() 
    { 
     Schema::table('users', function (Blueprint $table) { 
      $table->foreign('person_id') 
       ->references('id') 
       ->on('people'); 
     }); 
    } 

    public function down() 
    { 
     Schema::table('users', function (Blueprint $table) { 
      $table->dropForeign('person_id'); 
     }); 
    } 

} 

Дополнительной информация: основана на комментарий ниже я удалил строки из миграции таблицу, чтобы они не были указаны как h (в надежде помочь «Ничто не мигрировать»). После этого и попытки миграции php-artisan я получаю такую ​​же «связь», что и «ошибка не существует», упомянутая выше, и теперь таблица миграции показывает «пакетное» значение 1 для create_users_table и 2 для всех остальных.

Даже более сумасшедший: поскольку ремесленник выполняет миграцию по порядку и думал, что ему нечего запускать (но было заблокировано от создания таблицы пользователей), я создал новый сценарий миграции для выполнения последнего, когда содержимое создало эту таблицу пользователей. по крайней мере, он прекратил рассказывать мне «Ничего мигрировать», НО он дает ошибку «повторяющейся таблицы» для таблицы «ДРУГИЕ» (называемой «обновлениями»), а не той, которую я на самом деле пытался создать дважды: p

Я возвращаюсь в обычное место (где либо ремесленник находит, что мои сценарии миграции запускаются свежими, либо st ops пытается отменить изменения для таблицы, которая больше не существует). Я обещаю, что учу свой урок, чтобы не отбрасывать таблицы. К сожалению, похоже, что эта проблема менее-google-способна, чем обычно (или я не использую правильные условия) - любая помощь очень ценится !!

+0

Должна быть таблица под названием «миграция», в худшем случае вы можете вручную удалить миграции там до тех пор, пока не находитесь в точке, где вы хотите быть (или состоянии, в котором находятся ваши таблицы сейчас) –

+0

есть u попытался использовать php ремесленник мигрировать: откат? –

+0

Peyman- yes- (и я добавлю откат ко второй броне) - к сожалению, это дает мне ошибку «таблица не существует». Ciccio- хотел бы знать! Это звучит как «худший случай», поэтому я собираюсь продолжать охоту немного раньше, прежде чем удалять строки из этой таблицы. –

ответ

0

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

  1. Я бросил все таблицы в моей базе данных, включая таблицы кочевок
  2. я воссоздал таблицу миграции с ремесленником, как так: PHP ремесленник мигрирует: не устанавливать
  3. Затем миграция выполнена успешно, никаких проблем: PHP ремесленник: мигрировать

Все работает снова - ура!

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