使用Laravel 5.4并使用无符号BIGINT字段类型时遇到了奇怪的问题。
我的数据库中的一个字段我有这样的值:
10156480263320077 10157375840500077 285320181803715 798994416871156 10152807376710077 620382424666122 10152824605589176 824259214287650 10156820510510077
当我尝试使用以下命令将这些值转换为JSON响应时:
return response()->json(['ids' => $ids]);
他们中的一些人减去了1人。它只发生在以77结尾的那些:
10156480263320077 10157375840500077 10152807376710077 10157375840500077
我通过在编码响应之前将它们更改为字符串而不是数字来解决我的问题。我认为这是因为JSON试图将这些值视为INT而不是BIGINT。
但我对在编码之前更改值感到不满意。知道如何通过设置JSON响应选项来实现它吗?我知道使用setEncodingOptions(JSON_NUMERIC_CHECK)
会将字符串转换为数字值,但是可以选择在其他方向上执行此操作并将数字编码为字符串,这样就不会出现此问题吗?
答案 0 :(得分:0)
如果你提到的那么长,你需要将其解析为字符串,然后再次转换为int。
json_decode($test, true, 512, JSON_BIGINT_AS_STRING)
但我非常怀疑它的json响应会削减你的价值观。
您可以尝试以下代码;
$test= array(10156480263320077,10157375840500077,285320181803715,798994416871156,10152807376710077,620382424666122,10152824605589176,824259214287650,10156820510510077);
dd(json_decode(response()->json(['ids' => $test])->content(), true));
并获得此结果
可能的问题是您从数据库中获取数据错误或您的列不正确。