Laravel 5外键迁移错误
Laravel 5 foreign key migration error
我在尝试重置迁移时遇到问题。我正在使用 oracle sql,所以当问题出现时,我首先想到我已经完成了,我现在在我的 sql 开发人员中清空了数据库,我没有看到 table,但是如果我 运行 修补程序每 table 被创建一次。当我尝试回滚我的迁移时,我收到一个错误,指出我在某些 table 中有外键:table 中的 unique/primary 键被外键引用,但是当我尝试删除约束 artisan 说 table 没有这个约束。
这是我的迁移文件:
类别 table:
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');
}
文章table:
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');
}
我的角色table:
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');
}
我的标签 table:
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 migrate 没有创建 table,但是如果我 运行 php artisan migrate:refresh/rollback/reset unique/primary table 中的键在删除 table 文章时被外键引用。
我已经对此进行了搜索,但没有找到适合我的问题的任何内容希望我能在这里找到解决方案
你应该 dropForeign
在你放下 table 之前。
示例:
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');
}
我在尝试重置迁移时遇到问题。我正在使用 oracle sql,所以当问题出现时,我首先想到我已经完成了,我现在在我的 sql 开发人员中清空了数据库,我没有看到 table,但是如果我 运行 修补程序每 table 被创建一次。当我尝试回滚我的迁移时,我收到一个错误,指出我在某些 table 中有外键:table 中的 unique/primary 键被外键引用,但是当我尝试删除约束 artisan 说 table 没有这个约束。
这是我的迁移文件: 类别 table:
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');
}
文章table:
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');
}
我的角色table:
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');
}
我的标签 table:
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 migrate 没有创建 table,但是如果我 运行 php artisan migrate:refresh/rollback/reset unique/primary table 中的键在删除 table 文章时被外键引用。 我已经对此进行了搜索,但没有找到适合我的问题的任何内容希望我能在这里找到解决方案
你应该 dropForeign
在你放下 table 之前。
示例:
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');
}