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

Laravel 8 注册时Firebird数据库ID字段为空报错求助

Laravel 8 搭配 Firebird 注册报错:id字段为null的解决方法

问题重现

提交默认注册表单后触发错误:

SQLSTATE[HY000]: General error: -625 validation error for column id, value "*** null ***" (SQL: insert into "users" ("name", "email", "password", "updated_at", "created_at") values (Pavel, p@gmail.com , $2y$10$hqno7.foR2zNuSZvaONfEOjEuXJRdVo2PxXhs9q6jgi.hduuf1kjg, 2023-01-01 11:03:22, 2023-01-01 11:03:22))

原users表迁移代码:

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

问题原因

Laravel 默认的 $table->id() 方法在 Firebird 中不会自动创建自增序列(Generator)和配套触发器,导致插入数据时id字段无法自动生成值,触发非空验证错误。

解决方案

方案1:手动创建自增序列与触发器

修改迁移文件,先定义id字段,再手动添加Firebird需要的生成器和触发器:

Schema::create('users', function (Blueprint $table) {
    $table->integer('id')->unsigned();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
    $table->primary('id');
});

// 创建生成器
DB::statement('CREATE GENERATOR GEN_USERS_ID');

// 创建插入触发器,自动填充id
DB::statement('
CREATE TRIGGER TRG_USERS_ID FOR USERS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
    IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GEN_USERS_ID, 1);
END
');

方案2:使用Firebird兼容的自增字段定义

如果你的Laravel使用的是适配Firebird的数据库驱动,可以直接用increments()方法替换id(),驱动会自动处理生成器和触发器:

Schema::create('users', function (Blueprint $table) {
    $table->increments('id'); // 替换原有的$table->id()
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

注意事项

  • 先回滚已创建的users表:执行 php artisan migrate:rollback,再重新运行迁移 php artisan migrate
  • 确认Firebird数据库连接配置正确,驱动版本与Laravel 8兼容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:17:13