2014-07-07 9 views
2

Я использую ClosureTable для Laravel. и у меня проблема с миграцией.Не удается мигрировать в Laravel4 с помощью ClosureTable

Это то, что мой сценарий миграции выглядит следующим образом:

// Page_Closure сценарий миграции

public function up() 
{ 
    Schema::table('page_closure', function(Blueprint $table) 
    { 
     $table->engine = 'InnoDB'; 

     Schema::create('page_closure', function(Blueprint $t) 
     { 
      $t->increments('ctid'); 

      $t->integer('ancestor', false, true); 
      $t->integer('descendant', false, true); 
      $t->integer('depth', false, true); 
       //problem after this line. 
      $t->foreign('ancestor')->references('id')->on('pages'); 
      $t->foreign('descendant')->references('id')->on('pages'); 
     }); 
    }); 
} 

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

[Illuminate\Database\QueryException]                            
    SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'page_closure' already exists (SQL: create table `page_closure` (`ctid` int unsign 
    ed not null auto_increment primary key, `ancestor` int unsigned not null, `descendant` int unsigned not null, `depth` int unsigned not null) defa 
    ult character set utf8 collate utf8_unicode_ci) 

ответ

2

Поступая Schema::table('page_closure', ...) затем Schema::create('page_closure', ...) внутри него. Вы в основном говорите Laravel, чтобы найти существующую таблицу с именем page_closure, а затем создать таблицу с тем же именем. Вот почему вы получаете ошибку «Таблица» page_closure «уже существует».

Вам не нужна часть Schema::table(). Просто поместите ваш $table->engine = 'InnoDB' в вашем Schema::create(), как это ...

public function up() 
{ 
    Schema::create('page_closure', function(Blueprint $t) 
    { 
     $table->engine = 'InnoDB'; 

     $t->increments('ctid'); 
     // ... the rest of the columns 
    } 
} 

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

+0

Hi Unnawut, этот скрипт миграции был создан после строительных лесов. msgstr "Я использовал этот пакет https://github.com/franzose/ClosureTable. Таким образом, должно быть что-то не так с эшафотом для создания сценария миграции с этой ошибкой. – olleh

+1

@olleh Я думаю, вы, возможно, захотите сообщить об ошибке для них тогда. Мне не кажется, что у меня есть 'Schema :: table()' и 'Schema :: create()' одного имени таблицы внутри друг друга. Я думаю, что в 'Schema :: table()' должно быть имя вашей таблицы сущностей, а не таблицы закрытия. Может быть, вы можете попробовать это изменить. – Unnawut

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

  • Нет связанных вопросов^_^