2015-06-01 3 views
0

У меня проблема при попытке сбросить мои миграции. Я использую oracle sql, поэтому, когда возникла проблема, первое, что я сделал, я очистил базу данных сейчас в моем sqldeveloper, я не вижу таблицы, но если я запустил tinker, каждая таблица будет создана. Когда я пытаюсь отменить мои миграции, я получаю ошибку, связанную с тем, что у меня есть внешние ключи в некоторых таблицах: уникальные/первичные ключи в таблице, на которые ссылается внешний ключ, но когда я пытаюсь удалить ограничения, ремесленник говорит, что таблица не имеют это ограничение.Ошибка миграции внешнего ключа Laravel 5

Вот мои миграции перелетных файлов: категории таблица:

public function up() 
{ 
    Schema::create('categories', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->integer('parent'); 
    }); 
    Schema::create('article_category', function(Blueprint $table){ 
     $table->integer('article_id')->unsigned()->index(); 
     $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade'); 
     $table->integer('category_id')->unsigned()->index(); 
     $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

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

} 

статья таблица:

public function up() 
{ 
    Schema::create('articles', function(Blueprint $table){ 

     $table->increments('id'); 
     $table->longText('title'); 
     $table->integer('user_id')->unsigned(); 
     $table->string('excerpt',255); 
     $table->longText('body'); 
     $table->integer('likes')->default(0); 
     $table->longText('sourceName'); 
     $table->longText('linkURL'); 
     $table->integer('views')->default(0); 
     $table->timestamp('published_at'); 
     $table->timestamps(); 

     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 

    }); 


} 



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

моя роль таблица:

public function up() 
{ 
    Schema::create('roles', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->timestamps(); 
    }); 
    Schema::create('role_user', function(Blueprint $table){ 
     $table->integer('role_id')->unsigned()->index(); 
     $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); 
     $table->integer('user_id')->unsigned()->index(); 
     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

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

моей таблица тегов:

public function up() 
{ 
    Schema::create('tags', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->timestamps(); 
    }); 
    Schema::create('article_tag', function(Blueprint $table){ 
     $table->integer('article_id')->unsigned()->index(); 
     $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade'); 
     $table->integer('tag_id')->unsigned()->index(); 
     $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

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

Итак, базовая база данных пуста, но я ничего не могу запустить. Если я запускаю миграцию php artisan, таблицы не создаются, но если я запустил php artisan migrate: refresh/rollback/reset уникальные/первичные ключи в таблице, на которые ссылается внешний ключ при удалении статей таблицы. Я искал об этом, но я не нашел ничего, что бы соответствовало моей проблеме. Я найду здесь решение

ответ

0

Вы должны dropForeign перед тем, как отбросить стол.

Пример:

public function up() 
{ 
    Schema::create('tags', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->timestamps(); 
    }); 
    Schema::create('article_tag', function(Blueprint $table){ 
     $table->integer('article_id')->unsigned()->index(); 
     $table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade'); 
     $table->integer('tag_id')->unsigned()->index(); 
     $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade'); 
     $table->timestamps(); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::table('article_tag', function (Blueprint $table) { 
     $table->dropForeign('article_tag_article_id_foreign'); 
     $table->dropForeign('article_tag_tag_id_foreign'); 
    }); 
    Schema::drop('article_tag'); 
    Schema::drop('tags'); 
} 
+0

во-первых, я думал, что это моя проблема, потому что я не писал правильно dropforeign заявление, но затем я попытался, как вы сказали, и это дает мне: не может удалить ограничение - несуществующий ограничение в то внешний ключ. Я добавил это в мои файлы миграции: Schema :: table ('articles', function (Blueprint $ table) { $ table-> dropForeign ('articles_user_id_foreign'); }); –

+0

Это может быть проблемой, потому что я опустошил мою базу данных? –

+0

Не знаю, но вы можете удалить свою базу данных и начать с новой. –

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