36

在我的开发服务器上,来自 Laravel 5 控制器的 JSON 响应以正确的类型显示数据。

例如

imdb_rating: 7.6
imdb_votes: 6271

但在生产服务器上,JSON 响应以字符串的形式发回。

imdb_rating: "7.60"
imdb_votes: "6271"

开发和生产都安装了相同版本的 PHP (5.6.11-1)。

关于可能导致这种行为的任何想法?

4

3 回答 3

71

我刚刚遇到了同样的问题!对于那些正在寻找更合适的解决方案的人,您可能想查看$castsEloquent 模型的属性。

接受的解决方案将起作用,但它也会转换您可能不想转换的字段。我建议将此添加到您的 Eloquent 模型中:

protected $casts = [ 'imdb_rating' => 'float', 'imdb_votes' => 'integer' ];

这将直接在模型对象中转换值,因此您无需担心更新多个端点。我希望这对其他人有帮助!

于 2016-06-21T00:23:21.230 回答
56

确保使用支持原生数据类型的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);
于 2015-07-20T23:22:34.657 回答
0

您可以使用类型转换返回整数,例如

return (int)Post::find(1)->id;
于 2019-12-30T08:10:02.470 回答