Laravel Eloquent模型自定义表与主键时主键值错误
问题原因 & 解决方案
嘿,这个坑我之前踩过!你看到的2147483647其实是32位有符号整数的最大值,而你的person_id是unsigned bigint(20)类型,数值4294967410已经远超32位int的上限,所以Laravel默认把主键当作int处理时,直接触发了数值溢出,最终返回了这个截断后的最大值。
解决步骤
只需要在你的App\User模型里添加两行配置,明确告诉Laravel主键的类型:
protected $table = 'Person'; protected $primaryKey = 'person_id'; // 新增下面两行 protected $keyType = 'string'; // 将主键类型指定为字符串,避免数值溢出 public $incrementing = false; // 如果你的person_id不是自增字段,必须设置这个;如果是自增的unsigned bigint,可保留true,但$keyType仍需设置
为什么这样有效?
Laravel默认会把主键解析为int类型,而32位环境下的int根本存不下你的大数值。将$keyType设为string后,Laravel会以字符串形式处理主键,完全避免了数值截断的问题,查询和存储时也能正常匹配。
最后验证
修改完模型后,记得重新登录(因为Auth的用户数据可能存在session缓存里),或者手动清除session缓存,之后再调用Auth::user()->person_id就能拿到正确的4294967410了。
内容的提问来源于stack exchange,提问作者circuitBurn
相关产品推荐
相关产品推荐

