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

Laravel迁移设置非id命名主键触发错误该如何解决

解决Laravel使用自定义主键名报ORA-00904 "ID"无效标识符问题

错误原因

Laravel Eloquent模型默认约定主键字段名为id,你仅在迁移文件中修改了主键字段名,没有同步修改对应模型的主键配置,因此Oracle驱动执行插入操作时,仍然默认尝试返回ID字段的值,触发无效标识符错误。

解决步骤

  1. 修改对应的Employee模型配置
    打开app/Models/Employee.php,在类中声明$primaryKey属性指定自定义主键名:
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model
{
    // 指定自定义主键名称
    protected $primaryKey = 'employee_id';

    // 可选:如果主键不是自增的,需添加以下配置
    // public $incrementing = false;

    // 可选:如果主键不是int类型(比如字符串主键),需添加以下配置
    // protected $keyType = 'string';

    // 其余原有模型代码...
}
  1. 关联关系适配(可选)
    如果你有其他表和employees表做关联,定义关联关系时需要对应指定自定义主键:
// 例:Employee模型关联多个考勤记录
public function attendances()
{
    // 第二个参数为关联表的外键名,第三个参数为当前表的主键名
    return $this->hasMany(Attendance::class, 'employee_id', 'employee_id');
}

验证

修改完成后重新运行php artisan tinker执行插入操作,即可正常生成数据,不会再出现ID字段不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:45:03