在我的开发服务器上,来自 Laravel 5 控制器的 JSON 响应以正确的类型显示数据。
例如
imdb_rating: 7.6
imdb_votes: 6271
但在生产服务器上,JSON 响应以字符串的形式发回。
imdb_rating: "7.60"
imdb_votes: "6271"
开发和生产都安装了相同版本的 PHP (5.6.11-1)。
关于可能导致这种行为的任何想法?
我刚刚遇到了同样的问题!对于那些正在寻找更合适的解决方案的人,您可能想查看$casts
Eloquent 模型的属性。
接受的解决方案将起作用,但它也会转换您可能不想转换的字段。我建议将此添加到您的 Eloquent 模型中:
protected $casts = [ 'imdb_rating' => 'float', 'imdb_votes' => 'integer' ];
这将直接在模型对象中转换值,因此您无需担心更新多个端点。我希望这对其他人有帮助!
确保使用支持原生数据类型的MySQL Native Driver 。
如果使用 mysqlnd 库,可以通过设置 MYSQLI_OPT_INT_AND_FLOAT_NATIVE 连接选项将整数和浮点列转换回 PHP 数字。如果设置,mysqlnd 库将检查结果集元数据列类型并将数字 SQL 列转换为 PHP 数字,如果 PHP 数据类型值范围允许的话。这样,例如,SQL INT 列作为整数返回。
MySQL 客户端库将所有字段作为字符串返回。
另一种解决方案是将 json_encode 选项与JSON_NUMERIC_CHECK
.
例如:
return response()->json(["foo" => "bar"], 200, [], JSON_NUMERIC_CHECK);
您可以使用类型转换返回整数,例如
return (int)Post::find(1)->id;