Laravel迁移设置非id命名主键触发错误该如何解决
解决Laravel使用自定义主键名报ORA-00904 "ID"无效标识符问题
错误原因
Laravel Eloquent模型默认约定主键字段名为id,你仅在迁移文件中修改了主键字段名,没有同步修改对应模型的主键配置,因此Oracle驱动执行插入操作时,仍然默认尝试返回ID字段的值,触发无效标识符错误。
解决步骤
- 修改对应的
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'; // 其余原有模型代码... }
- 关联关系适配(可选)
如果你有其他表和employees表做关联,定义关联关系时需要对应指定自定义主键:
// 例:Employee模型关联多个考勤记录 public function attendances() { // 第二个参数为关联表的外键名,第三个参数为当前表的主键名 return $this->hasMany(Attendance::class, 'employee_id', 'employee_id'); }
验证
修改完成后重新运行php artisan tinker执行插入操作,即可正常生成数据,不会再出现ID字段不存在的错误。
内容的提问来源于stack exchange,提问作者asdflkadslkfadsfjasdadsfsad
相关产品推荐
相关产品推荐

