我遇到"错误:150'外键约束形成错误'"迁移时。
我有一张需要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');
});
答案 0 :(得分:1)
此外键位于名为subcategories
:
$table->foreign('subcatidno')->references('id')->on('subcategories');
但您的表实际上称为sub_categories
:
Schema::create('sub_categories', function (Blueprint $table) {
答案 1 :(得分:0)
当您获得子类别时,您也不需要获得类别,因为您在子类别迁移中获得了类别。
并尝试将其设为user_id
和subcategory_id
,而不是selleridno
和subcatindo
。
看看它是否有效。
PS:您的子类别创建方法会像对待广告一样发出单独的外包密钥。
Schema::table('subcategory', function(Blueprint $table){
$table->foreign('category')->references('id')-> on('categories');
});