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
相关产品推荐
相关产品推荐

