You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel报SQLSTATE[HY000] 1364字段id无默认值及migrate报错如何解决

解决方案

你已经完成了基础排查,以下是针对性的排查修复步骤:

  1. 确认数据表主键属性配置正确
    直接登录MySQL对应库,执行命令查看表结构:
    DESC 你的业务表名;
    确认id字段的Key列为PRI(主键)、Extra列为auto_increment(自增)。如果配置不符,执行修改命令:
    ALTER TABLE 你的业务表名 MODIFY COLUMN id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY FIRST;

  2. 检查对应Eloquent模型配置
    打开业务表对应的模型文件,确认三个核心配置没有被手动修改:

  • 主键字段名正确:protected $primaryKey = 'id';(如果自定义了主键名,要和数据库字段对应)
  • 自增属性开启:public $incrementing = true;(默认值为true,手动改为false会触发该报错)
  • 主键类型匹配:protected $keyType = 'int';(使用UUID主键的场景需要改为string同时关闭自增)
  1. 修复数据库迁移文件
    你执行migrate:refresh也报错,大概率是迁移文件中id字段定义错误。打开对应表的迁移文件,确保id字段写法正确:
    优先使用Laravel默认的主键写法:
Schema::create('你的业务表名', function (Blueprint $table) {
    $table->id();
    // 其他字段定义
    $table->timestamps();
});

如果是手动定义id字段,必须加上主键和自增属性:
$table->integer('id')->autoIncrement()->primary();

  1. 排查业务代码逻辑
    检查新增数据的代码段,确认调用create()、insert()等方法时,没有手动传入空值/NULL的id字段,id为自增主键时不需要手动赋值。

  2. 确认数据库连接正确
    执行php artisan tinker,输入config('database.connections.mysql.database'),确认返回的库名和你修改表结构的库一致,避免出现多环境连错库的问题。


内容的提问来源于stack exchange,提问作者Anthony Rogers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:24:04