LARAVEL 5.5外键约束的格式不正确'
LARAVEL 5.5 Foreign key constraint is incorrectly formed'
迁移时遇到"errno: 150 'Foreign key constraint is incorrectly formed'"
我有一个 table 需要 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');
});
用户、类别和子类别 table 是在此 table 之前创建的。 selleridno 和 catidno 已成功创建,但在为 subcatidno 创建外键时遇到错误。有 suggestions/opinions 吗?提前谢谢你。
我的数据库是 MySql。
以防万一您需要子类别 table 这里是:
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');
});
当您获取子类别时,您不需要同时获取类别,因为您在子类别迁移中获取了类别。
并尝试将它们设为 user_id
和 subcategory_id
而不是 selleridno
和 subcatindo
。
看看是否有效。
PS: 您的子类别创建方法有单独的外键,就像您为广告所做的那样。
Schema::table('subcategory', function(Blueprint $table){
$table->foreign('category')->references('id')-> on('categories');
});
这个外键在一个名为 subcategories
的 table 上:
$table->foreign('subcatidno')->references('id')->on('subcategories');
但是你的table其实叫sub_categories
:
Schema::create('sub_categories', function (Blueprint $table) {
迁移时遇到"errno: 150 'Foreign key constraint is incorrectly formed'"
我有一个 table 需要 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'); });
用户、类别和子类别 table 是在此 table 之前创建的。 selleridno 和 catidno 已成功创建,但在为 subcatidno 创建外键时遇到错误。有 suggestions/opinions 吗?提前谢谢你。
我的数据库是 MySql。
以防万一您需要子类别 table 这里是:
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');
});
当您获取子类别时,您不需要同时获取类别,因为您在子类别迁移中获取了类别。
并尝试将它们设为 user_id
和 subcategory_id
而不是 selleridno
和 subcatindo
。
看看是否有效。
PS: 您的子类别创建方法有单独的外键,就像您为广告所做的那样。
Schema::table('subcategory', function(Blueprint $table){
$table->foreign('category')->references('id')-> on('categories');
});
这个外键在一个名为 subcategories
的 table 上:
$table->foreign('subcatidno')->references('id')->on('subcategories');
但是你的table其实叫sub_categories
:
Schema::create('sub_categories', function (Blueprint $table) {