如何解决 laravel 迁移错误“一般错误:1005 无法创建表”

Posted

技术标签:

【中文标题】如何解决 laravel 迁移错误“一般错误:1005 无法创建表”【英文标题】:How to fox laravel migration error "General error: 1005 Can't create table" 【发布时间】:2019-11-21 20:58:46 【问题描述】:

当我尝试运行迁移以创建外键约束时,我在命令提示符中收到以下错误。我需要帮助来克服它,因为我在互联网上进行了很多搜索并尝试了许多以前相同类型问题的答案,不幸的是,没有一个有效

Illuminate\Database\QueryException : SQLSTATE[HY000]: 一般错误: 1005 无法创建表db_blog.category_posts (errno: 150 "外键约束格式不正确") (SQL: alter table @987654323 @添加约束category_posts_post_id_foreign外键(post_id)在删除级联上引用postsid)在 1

PDOException::("SQLSTATE[HY000]: 一般错误: 1005 无法创建表db_blog.category_posts (errno: 150 "外键约束格式不正确")")

请使用参数 -v 查看更多详细信息。

public function up()
    
        Schema::create('category_posts', function (Blueprint $table) 

            $table->integer('post_id')->unsigned()->index();
            $table->integer('category_id')->unsigned()->index();
            $table->foreign('post_id')->references('id')->on('posts')- 
    >onDelete('cascade');


            $table->timestamps();
        );
    

不明白这方面哪里有问题

【问题讨论】:

posts.id 是什么类型的列?在后表中。 在帖子表中帖子 ID 类型为“bigint” 那么post_id 中的category_posts 也必须属于bigint。列的类型需要匹配。 我尝试在 laravel 中使用“整数”类型和“增量”,但不起作用 如果posts.idbigint(签名),那么category_posts.post_id 必须是bigint(签名)。所以它们必须是相同的符号、长度类型。完全一样。 【参考方案1】:

不知道你的项目是哪个版本,但是最新的,外键用的是bigInteger,ID用的是bigIncrements。

我也相信首先创建的是 post 表,而不是 category_posts。否则,首先创建它。 可以确认一下吗?

【讨论】:

当我在 category_post 之前迁移 post 表时,我认为你是正确的。这是迁移的图像photos.app.goo.gl/PiZBbWpQCEuSv8Az8 要更改顺序,您可以重命名文件,或者只是创建另一个迁移。通常,我会更改名称。更具体地说是创建日期... 兄弟,我为帖子创建了一个新的迁移,但我得到了同样的错误。 如果可能,显示两个迁移是如何进行的,就像从目录中打印一样。我想看看它们之间的关系。或者直接在此处粘贴代码

以上是关于如何解决 laravel 迁移错误“一般错误:1005 无法创建表”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 模型关系错误如何解决?

Laravel 5.4数据库迁移不起作用[重复]

Laravel 工匠迁移失败

laravel 迁移:回滚错误

工匠迁移结果:SQLSTATE [HY000]:一般错误:LUMEN / LARAVEL 上的 1005

如何修复laravel迁移中的外键错误