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

MySQL表varchar类型主键id在Laravel中返回0的问题解决

问题根源与解决方案

问题根源

Laravel Eloquent模型默认将主键id视为自增整数类型,因此默认启用了两个关键配置:

  • public $incrementing = true;:标记主键为自增字段
  • protected $keyType = 'int';:指定主键数据类型为整数

当你的表主键id实际是varchar类型时,Eloquent会自动将查询到的字符串id强制转换为整数。非数字格式的字符串会被转为0,这就是响应中id显示为0的原因。

解决方案(不修改id字段名)

在对应的CategoryModel中添加两行配置,覆盖默认的主键设置:

class CategoryModel extends Model
{
    protected $fillable = [
        'id',
        'titleEn',
        'titleFa',
        'icon',
        'sortOrder',
    ];

    // 关闭主键自增(varchar类型主键无需自增)
    public $incrementing = false;
    // 指定主键类型为字符串
    protected $keyType = 'string';
}

修改后,Eloquent会正确识别id的字符串类型,不再进行强制类型转换,API响应就能返回数据库中实际的varchar格式id值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:52:36