如何在Laravel JSON中强制int为字符串?

时间:2017-03-31 12:04:48

标签: php json laravel

我最近因各种原因将我的服务器更新为更新版本的MySQL和PHP 7。在我之前的实例中,运行PHP 5.5,Laravel的response()->json()总是将tinyint转换为字符串。现在运行更新的服务器软件,它正在返回int - 它应该......

我必须将大量的代码库更改为转换类型/手动将它们转换为字符串,这是我目前要避免的。

有没有办法以某种方式强制response()->json()int作为string返回?

5 个答案:

答案 0 :(得分:2)

  
    

有没有办法以某种方式强制响应() - > json()将int' s作为字符串' s

  
     

我不想更改代码库 - 不想转换类型,转换它,

没有。没有选择。如果需要,你需要自己做。

答案 1 :(得分:1)

有一种方法可以将整数转换为laravel中的字符串

在模型中

可以将id转换为字符串。其内容如下

protected $casts = [ 'id' => 'string' ];

但缺点是你必须为所有模特做到这一点。

答案 2 :(得分:0)

如果您不想修改大量代码,可以通过快速而肮脏的功能运行响应数据。您应该将数据作为嵌套数组获取,而不是将目录转移到JSON。然后把它通过这样的函数:

function convertIntToString ($myArray) {
    foreach ($myArray as $thisKey => $thisValue) {
        if (is_array($thisValue)) {
            // recurse to handle a nested array
            $myArray[$thisKey] = convertIntToString($thisValue);
        } elseif (is_integer($thisValue)) {
            // convert any integers to a string
            $myArray[$thisKey] = (string) $thisValue;
        }
    }
    return $myArray;
}

该函数将整数转换为字符串,并使用递归来处理嵌套数组。从中获取输出,然后将其转换为JSON。

答案 3 :(得分:0)

对我来说,最好的解决方案是使用attribute castingFractal transformers

如果包含多个关系的复杂响应,分形变换器非常有用。

答案 4 :(得分:-1)

您可以将其强制转换为字符串:

return response-> json([“data”=>(string)1]);