Laravel API返回字母数字主键ID变为0问题排查求助
问题解决:Laravel API返回字母数字主键变为0
问题原因
Laravel模型默认假设主键id为整数类型,当数据库中id是字母数字字符串时,框架会自动尝试将其转换为整数,非数字开头的字符串会被解析为0,这就是API返回id:0的根本原因。
解决方案
1. 修改Institute模型配置
在Institute.php模型中显式指定主键类型为字符串,并关闭自增特性:
class Institute extends Model { use HasFactory; // 新增这两行关键配置 protected $keyType = 'string'; public $incrementing = false; protected $fillable = [ 'name', 'id', ]; public function students() { return $this->hasMany(Student::class); } }
2. 检查关联模型(若有)
如果Student模型与Institute关联,需确保students表中的institute_id字段是字符串类型,同时在Student模型中保持关联逻辑正确:
class Student extends Model { // 若Student的主键也是字符串,同样需配置以下属性(可选) // protected $keyType = 'string'; // public $incrementing = false; public function institute() { return $this->belongsTo(Institute::class, 'institute_id'); } }
3. 验证结果
重启Laravel服务(确保配置生效),重新调用API,此时返回的id会正确显示为数据库中的字母数字值(如TOIC86200P)。
补充说明
Laravel ORM默认主键为自增整数,当使用非自增字符串主键时,必须显式配置$keyType和$incrementing属性,否则框架的自动类型转换会导致数据异常。
内容的提问来源于stack exchange,提问作者Fabio Pisani
相关产品推荐
相关产品推荐

