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
)
我想说你有四个选择:
邮政编码
添加到强制转换
数组中,以确保始终将其强制转换为字符串(不错;这在大多数情况下都有效,但不是正确的解决方案)邮政编码
字段的字段类型从整数
更改为varchar(5)
、varchar(9)
或varchar(10)
,具体取决于您是否要存储+4以及是否使用连字符(最佳解决方案)将数据库中的
邮政编码
数据类型更改为varchar
确实是最好的选择。主要原因是,虽然邮政编码由数字组成,但实际上并不是整数或数字。你永远不会和他们做任何算术运算。此外,还有以前导0开头的邮政编码,如果该值存储为整数,则无论何时显示邮政编码,都必须处理这一额外的边缘情况。启用PDO::ATTR_STRINGIFY_FETCHES设置将解决此问题。您可以在数据库配置下添加此PDO设置
'options' => array(
PDO::ATTR_STRINGIFY_FETCHES => true,
),
有PHP5.9吗?$cast=[]除了实例化一个空数组之外,究竟意味着什么?