Laravel 5 controller sending JSON integer as string

Muggles picture Muggles · Jul 20, 2015 · Viewed 21.2k times · Source

On my development server the JSON response from the Laravel 5 controller shows the data in the correct types.

e.g

imdb_rating: 7.6
imdb_votes: 6271

But on the production server, the JSON response is sent back as strings.

imdb_rating: "7.60"
imdb_votes: "6271"

Both development and production have the same version of PHP installed (5.6.11-1).

Any ideas on what may be causing this behaviour?

Answer

David R. Myers picture David R. Myers · Jun 21, 2016

I just ran into this same issue! For those of you looking for a more appropriate solution, you might want to check out the $casts property for Eloquent models.

The accepted solution will work, but it will also convert fields that you may not want converted. I would recommend adding this to your Eloquent model:

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

This will convert the values directly in your model object, so you won't need to worry about updating multiple endpoints. I hope this helps others as it did me!