Laravel 9迁移报错errno:150,外键约束创建失败求助
Laravel员工表外键约束错误解决方法
针对你遇到的SQLSTATE[HY000]: General error: 1005外键约束错误,结合已知公司表id为UNSIGNED类型,可按以下步骤排查解决:
保证字段类型完全匹配
员工表的company_id字段类型必须和公司表id完全一致:- 若公司表
id是unsignedBigInteger,员工表需定义:$table->unsignedBigInteger('company_id'); - 若公司表
id是unsignedInteger,员工表需定义:$table->unsignedInteger('company_id');
类型不匹配(比如混用
unsignedBigInteger和unsignedInteger)是此类错误的常见原因。- 若公司表
确认迁移执行顺序
Laravel按迁移文件的时间戳顺序执行,必须先创建companies表,再创建employees表:- 检查迁移文件名的时间戳,确保
create_companies_table的时间戳早于create_employees_table; - 若顺序错误,可先单独执行公司表迁移:
再执行员工表迁移。php artisan migrate --path=database/migrations/[你的公司表迁移文件名].php
- 检查迁移文件名的时间戳,确保
检查表存储引擎
外键约束仅支持InnoDB引擎,确保两张表都使用InnoDB:// 在迁移文件的up方法中添加 $table->engine = 'InnoDB';验证外键定义语法
确保外键关联的表名和字段名拼写正确:$table->foreign('company_id') ->references('id') ->on('companies') ->onDelete('cascade');
内容的提问来源于stack exchange,提问作者Arctic Fox
相关产品推荐
相关产品推荐

