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

