Php Laravel在json响应中返回整数

Php Laravel在json响应中返回整数,php,json,laravel,Php,Json,Laravel,我正在使用 $user = User::find($user_id); return response()->json(array('user'=>$user),200); 在php5.9的本地服务器上,它以字符串形式返回除id之外的所有密钥 { "success": "1", "message": "success", "user": { "id": 75, "name": "", "postal_code"

我正在使用

$user = User::find($user_id);
return response()->json(array('user'=>$user),200);
在php5.9的本地服务器上,它以字符串形式返回除id之外的所有密钥

{
    "success": "1",
    "message": "success",
    "user": {
        "id": 75,
        "name": "",
        "postal_code": "73733",
    }
}
但使用php7.0的生产服务器上的相同代码返回integer ex类型的其他键。请检查此邮政编码值

{
    "success": "1",
    "message": "success",
    "user": {
        "id": 75,
        "name": "",
        "postal_code": 73733,
    }
}
所以我在User.php中使用
$cast=[]
来解决这个问题


但我也使用了原始查询。将响应json中的所有值转换为字符串类型的最佳方法是什么。

您可以转换为字符串,如:

$user['postal_code'] = (string) $user['postal_code'];
有关变量类型转换的更多信息,请参阅


希望这有帮助:)

类型的差异很可能是因为您的本地服务器使用的是
php5 mysqld
(非本机)驱动程序,而您的生产服务器可能使用的是
php mysqlnd
(本机)驱动程序。主要区别之一是非本机驱动程序将所有字段读取为字符串,而本机驱动程序将自动将整数字段转换为PHP整数

id
在这两种情况下都显示为整数,因为Laravel会自动将主键字段(“id”)添加到casts数组中,类型由
$keyType
属性定义(默认为
int

我想说你有四个选择:

  • 尝试在生产服务器上安装PHP 7的非本机mysql驱动程序(不推荐)

  • 不要在PHP端做任何事情,只需确保使用json的任何东西都可以处理字符串或整数(无论哪种方式都可能是个好主意,但仍然不能解决真正的问题)

  • 邮政编码
    添加到
    强制转换
    数组中,以确保始终将其强制转换为字符串(不错;这在大多数情况下都有效,但不是正确的解决方案)

  • 邮政编码
    字段的字段类型从
    整数
    更改为
    varchar(5)
    varchar(9)
    varchar(10)
    ,具体取决于您是否要存储+4以及是否使用连字符(最佳解决方案)


  • 将数据库中的
    邮政编码
    数据类型更改为
    varchar
    确实是最好的选择。主要原因是,虽然邮政编码由数字组成,但实际上并不是整数或数字。你永远不会和他们做任何算术运算。此外,还有以前导0开头的邮政编码,如果该值存储为整数,则无论何时显示邮政编码,都必须处理这一额外的边缘情况。

    启用PDO::ATTR_STRINGIFY_FETCHES设置将解决此问题。您可以在数据库配置下添加此PDO设置

    'options'   => array(
        PDO::ATTR_STRINGIFY_FETCHES => true,
    ),
    

    有PHP5.9吗?$cast=[]除了实例化一个空数组之外,究竟意味着什么?