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

Laravel Eloquent序列化:带横杠ID转数组后丢失分隔符问题

解决Laravel中Varchar类型带横杠ID转数组丢失横杠的问题

这个坑我之前踩过!核心原因是Laravel Eloquent模型的自动类型转换机制在暗中操作:

虽然你的id字段在数据库里是varchar(24)类型,但它的格式是数字-数字,Laravel在执行toArray()的时候,会自动识别那些看起来能转成数字的字符串,把它们强制转换成整数类型——这就导致横杠被直接忽略,变成了纯数字串。而直接print_r($this->all())没问题,是因为此时数据还保持着Eloquent Collection对象的原始属性,还没触发类型转换逻辑。

两种快速解决方法:

方法1:全局指定字段类型(推荐)

在你的模型里添加$casts属性,强制把id字段锁定为字符串类型:

class YourModel extends Model
{
    // ... 其他模型代码
    
    protected $casts = [
        'id' => 'string',
    ];
}

这样不管是调用toArray()还是toJson(),id都会严格保持原始的带横杠字符串格式。

方法2:临时手动转换(适合单次场景)

如果不想修改模型全局设置,可以在获取数据时手动处理:

$allArray = $this->all()->map(function ($item) {
    // 强制把id转成字符串
    $item->id = (string)$item->id;
    return $item;
})->toArray();

设置完成后再测试,你会发现id字段的横杠就不会丢失啦!

内容的提问来源于stack exchange,提问作者Dvir Levy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:48:50