一般错误:1005 Can't create table ,在 laravel 中外键约束形成错误

Posted

技术标签:

【中文标题】一般错误:1005 Can\'t create table ,在 laravel 中外键约束形成错误【英文标题】:General error: 1005 Can't create table ,Foreign key constraint is incorrectly formed in laravel一般错误:1005 Can't create table ,在 laravel 中外键约束形成错误 【发布时间】:2017-05-06 16:37:08 【问题描述】:

为什么 laravel 模式回复

[照亮\数据库\查询异常] SQLSTATE[HY000]: 一般错误: 1005 Can't create table test.#sql-13cc_d0 (errno: 150 "外键约束格式不正确") (SQL: alter table cities add constrai nt cities_provinces_id_foreign外键(provinces_id)在删除级联时引用provincesid

[PDOException] SQLSTATE[HY000]:一般错误:1005 无法创建 表test.#sql-13cc_d0 (errno: 150 "外键约束是 格式不正确")

第一张桌子

Schema::create('provinces', function (Blueprint $table) 
        $table->increments('id');
        $table->string('name');
        $table->boolean('is_enable');
        $table->boolean('is_deletable');
        $table->boolean('is_editable');
        $table->boolean('deleted');
        $table->timestamps();
    ); 

第二张桌子

    Schema::create('cities', function (Blueprint $table) 
        $table->increments('id');
        $table->string('name');
        $table->integer('province_id')->unsigned()->index();
        $table->boolean('is_enable');
        $table->boolean('is_deletable');
        $table->boolean('is_editable');
        $table->boolean('deleted');
        $table->timestamps();


        $table->foreign('province_id')
            ->references('id')->on('provinces')
            ->onDelete('cascade');

    );

【问题讨论】:

【参考方案1】:

时间继续,但我会评论其他内容。

安迪尔是对的!您必须具有相同的类型。在这种情况下,外键的类型应该是 bigInteger,因为您在引用表上有 bigIncrements

我认为这是一个小而无聊的调试的解决方案。 (对不起我的英语)

【讨论】:

其实我早就知道了。但我忘记了。 ForeignKeys 的引用表总是需要首先创建。我更改了表格的时间戳。我已经创建了我引用的表。答案对我有用。谢谢。【参考方案2】:

外键和引用表必须是同一类型,自动生成的 id 是 bigInteger,所以不要将列定义为 Integer,而是使用 bigInteger insteed。这为我解决了问题

【讨论】:

【参考方案3】:

尝试先建表再添加约束:

Schema::create('cities', function (Blueprint $table) 
    $table->increments('id');
    $table->string('name');
    $table->integer('province_id')->unsigned()->index();
    $table->boolean('is_enable');
    $table->boolean('is_deletable');
    $table->boolean('is_editable');
    $table->boolean('deleted');
    $table->timestamps();
);

Schema::table('cities', function (Blueprint $table) 
    $table->foreign('province_id')->references('id')->on('provinces')->onDelete('cascade');
);

【讨论】:

【参考方案4】:

您应该确保您的provinces 表迁移在cities 表迁移之前运行。

您应该更改provincescities 迁移文件名,以确保provinces 表迁移文件开头的时间戳在cities 表之前。

【讨论】:

以上是关于一般错误:1005 Can't create table ,在 laravel 中外键约束形成错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8:一般错误:1005 无法创建表

ClipboardManager 抛出以下错误:Can't create handler inside thread that has not called Looper.prepare() usin

Laravel 5.8 错误 SQLSTATE[HY000]: 一般错误: 1005 uuid

SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005

LARAVEL 8:一般错误:使用外键运行迁移时发生 1005

SQLSTATE[HY000]:一般错误:1005 无法创建表 Laravel 8