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_idsubcategory_id 而不是 selleridnosubcatindo

看看它是否有效。

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 外键约束的格式不正确'的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 外键约束的格式不正确

Laravel 上的“外键约束格式不正确”

Laravel 迁移错误号:150“外键约束格式不正确”

Laravel 迁移错误:150“外键约束格式不正确”

Laravel 抛出 errno:150 “外键约束的格式不正确”,尽管语法正确

laravel errno 150 外键约束格式不正确