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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:19:07