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