php json laravel laravel-5 php-5.6

php - Controlador Laravel 5 enviando entero JSON como cadena



laravel-5 php-5.6 (2)

¡Acabo de encontrarme con este mismo problema! Para aquellos de ustedes que buscan una solución más apropiada, es posible que desee revisar la propiedad $casts para los modelos Eloquent.

La solución aceptada funcionará, pero también convertirá los campos que no desee convertir. Recomendaría agregar esto a su modelo de Eloquent:

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

Esto convertirá los valores directamente en su objeto modelo, por lo que no tendrá que preocuparse por actualizar varios puntos finales. ¡Espero que esto ayude a otros como a mí!

En mi servidor de desarrollo, la respuesta JSON del controlador Laravel 5 muestra los datos en los tipos correctos.

p.ej

imdb_rating: 7.6 imdb_votes: 6271

Pero en el servidor de producción, la respuesta JSON se devuelve como cadenas.

imdb_rating: "7.60" imdb_votes: "6271"

Tanto el desarrollo como la producción tienen la misma versión de PHP instalada (5.6.11-1).

¿Alguna idea sobre qué puede estar causando este comportamiento?


Asegúrese de utilizar el controlador nativo de MySQL, que admitirá los tipos de datos nativos.

Es posible convertir columnas enteras y flotantes de nuevo a números de PHP al configurar la opción de conexión MYSQLI_OPT_INT_AND_FLOAT_NATIVE, si se usa la biblioteca mysqlnd. Si se establece, la biblioteca mysqlnd verificará los tipos de columnas de metadatos del conjunto de resultados y convertirá las columnas numéricas de SQL en números de PHP, si el rango de valores del tipo de datos de PHP lo permite. De esta manera, por ejemplo, las columnas INT de SQL se devuelven como enteros.

MySQL Client Library devolverá todos los campos como cadenas.

Otra solución sería usar las opciones JSON_NUMERIC_CHECK con JSON_NUMERIC_CHECK .

Por ejemplo:

return response()->json(["foo" => "bar"], 200, [], JSON_NUMERIC_CHECK);