Laravel 5 控制器将 JSON 整数作为字符串发送
在我的开发服务器上,来自Laravel 5控制器的JSON响应以正确的类型显示数据。
例如
imdb_rating: 7.6
imdb_votes: 6271
但在生产服务器上,JSON 响应以字符串形式发送回。
imdb_rating: "7.60"
imdb_votes: "6271"
开发和生产都安装了相同版本的 PHP (5.6.11-1)。
关于可能导致这种行为的原因的任何想法?
在我的开发服务器上,来自Laravel 5控制器的JSON响应以正确的类型显示数据。
例如
imdb_rating: 7.6
imdb_votes: 6271
但在生产服务器上,JSON 响应以字符串形式发送回。
imdb_rating: "7.60"
imdb_votes: "6271"
开发和生产都安装了相同版本的 PHP (5.6.11-1)。
关于可能导致这种行为的原因的任何想法?
我刚刚遇到了同样的问题!对于那些正在寻找更合适的解决方案的人,您可能需要查看Eloquent模型的$casts
属性。
接受的解决方案将起作用,但它也将转换您可能不希望转换的字段。我建议将其添加到您的雄辩模型中:
protected $casts = [ 'imdb_rating' => 'float', 'imdb_votes' => 'integer' ];
这将直接在模型对象中转换值,因此无需担心更新多个终结点。我希望这能像帮助别人一样帮助我!
确保使用MySQL本机驱动程序,它将支持本机数据类型。
如果使用 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);