LARAVEL 5.5 外键约束的格式不正确'
Posted
技术标签:
【中文标题】LARAVEL 5.5 外键约束的格式不正确\'【英文标题】:LARAVEL 5.5 Foreign key constraint is incorrectly formed'LARAVEL 5.5 外键约束的格式不正确' 【发布时间】:2018-02-19 05:24:47 【问题描述】:我在迁移时遇到“errno: 150 'Foreign key constraint is wronglyform'”。
我有一个需要 3 个外键的表:
Schema::create('ads', function (Blueprint $table) $table->increments('id'); $table->string('prodname'); $table->string('mfrname'); $table->decimal('priceam'); $table->string('imagenametxt',500); $table->string('specstxt',500); $table->string('otherinfotxt',500); $table->decimal('avalableqty'); $table->binary('validyn'); $table->binary('checkyn'); $table->binary('updatedyn'); $table->integer('selleridno')->unsigned(); $table->integer('catidno')->unsigned(); $table->integer('subcatidno')->unsigned(); $table->timestamps(); ); Schema::table('ads', function(Blueprint $table) $table->foreign('selleridno')->references('id')->on('users'); $table->foreign('catidno')->references('id')->on('categories'); $table->foreign('subcatidno')->references('id')-> on('subcategories'); );
用户、类别和子类别表在此表之前创建。 Selleridno 和 catidno 已成功创建,但在为 subcatidno 创建外键时遇到错误。有什么建议/意见吗?提前谢谢你。
我的数据库是 mysql。
以防万一您需要 SubCategories 表:
Schema::create('sub_categories', function (Blueprint $table)
$table->increments('id');
$table->string('subcategorycd');
$table->string('subcategorytxt');
$table->integer('categoryidno')->unsigned();
$table->timestamps();
$table->foreign('categoryidno')->references('id')->on('categories');
);
【问题讨论】:
我认为您的迁移执行顺序有问题。由于应该先创建父表而不是使用父ID作为外键的表。 @SagarGautam 我已经安排好了,先生,因为在此之前我也遇到过这种问题。但如上所述,父表是在具有外键的表之前首先创建的。谢谢先生。 @punky 是你的表名 sub_categories 或 subcategories 请检查 @saurabhkamble 哦,天哪,我太愚蠢了,没有注意到这一点。谢谢先生。 【参考方案1】:当您获得子类别时,您不需要再获得类别,因为您在子类别迁移中获得类别。
并尝试将它们设置为 user_id
和 subcategory_id
而不是 selleridno
和 subcatindo
。
看看它是否有效。
PS:您的子类别 creat 方法具有单独的外键,就像您为广告所做的那样。
Schema::table('subcategory', function(Blueprint $table)
$table->foreign('category')->references('id')-> on('categories');
);
【讨论】:
【参考方案2】:此外键位于名为 subcategories
的表中:
$table->foreign('subcatidno')->references('id')->on('subcategories');
但是你的表实际上叫sub_categories
:
Schema::create('sub_categories', function (Blueprint $table)
【讨论】:
以上是关于LARAVEL 5.5 外键约束的格式不正确'的主要内容,如果未能解决你的问题,请参考以下文章