Laravel创建loans表时报SQL 1075表定义错误如何解决?
报错原因
bigIncrements()是Laravel迁移框架内置的主键定义方法,作用是生成自增、无符号、大整数类型的主键,MySQL原生规定单张表只能存在一个自增列且必须设为主键。你在loans表的迁移中给book_id、user_id两个外键字段也使用了bigIncrements(),导致表中同时存在3个自增主键,直接触发1075语法错误。
此外还存在隐藏的字段类型不匹配问题:books表主键id_book、users表主键id均通过increments()创建,实际类型为int unsigned,和bigIncrements()生成的bigint unsigned类型不匹配,哪怕解决自增问题外键约束也会创建失败。
修复方案
仅需修改loans表的迁移文件,将两个外键字段的定义改为和关联表主键类型一致的普通无符号整数字段即可,修改后代码如下:
public function up() { Schema::create('loans', function (Blueprint $table) { $table->increments('id_loan'); // 替换原bigIncrements写法,类型和关联表主键匹配 $table->unsignedInteger('book_id'); $table->unsignedInteger('user_id'); $table->date('date_vto'); $table->foreign('book_id')->references('id_book')->on('books')->onDelete('cascade'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); }); }
你现有模型层的关联定义没有问题,无需调整。
如果之前已经执行过失败的迁移,开发环境可先执行php artisan migrate:rollback回滚失败的迁移记录,再重新执行php artisan migrate即可。
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

