如何解决 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
)在删除级联上引用posts
(id
)在 1PDOException::("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.id
是bigint
(签名),那么category_posts.post_id
必须是bigint(签名)。所以它们必须是相同的符号、长度和类型。完全一样。
【参考方案1】:
不知道你的项目是哪个版本,但是最新的,外键用的是bigInteger,ID用的是bigIncrements。
我也相信首先创建的是 post 表,而不是 category_posts。否则,首先创建它。 可以确认一下吗?
【讨论】:
当我在 category_post 之前迁移 post 表时,我认为你是正确的。这是迁移的图像photos.app.goo.gl/PiZBbWpQCEuSv8Az8 要更改顺序,您可以重命名文件,或者只是创建另一个迁移。通常,我会更改名称。更具体地说是创建日期... 兄弟,我为帖子创建了一个新的迁移,但我得到了同样的错误。 如果可能,显示两个迁移是如何进行的,就像从目录中打印一样。我想看看它们之间的关系。或者直接在此处粘贴代码以上是关于如何解决 laravel 迁移错误“一般错误:1005 无法创建表”的主要内容,如果未能解决你的问题,请参考以下文章