Контроллер Laravel 5, отправляющий целое число JSON в виде строки

на моем сервере разработки ответ JSON от контроллера Laravel 5 показывает данные в правильных типах.

Эл.г

imdb_rating: 7.6
imdb_votes: 6271

но на производственном сервере ответ JSON отправляется обратно в виде строк.

imdb_rating: "7.60"
imdb_votes: "6271"

как разработка, так и производство имеют одну и ту же версию PHP (5.6.11-1).

любые идеи о том, что может быть причиной такого поведения?

2 ответов


обязательно используйте MySQL Родной Драйвер который будет поддерживать собственные типы данных.

можно преобразовать целочисленные и плавающие столбцы обратно в числа PHP, установив параметр MYSQLI_OPT_INT_AND_FLOAT_NATIVE соединения, если используется библиотека mysqlnd. Если установлено, библиотека mysqlnd проверит типы столбцов метаданных результирующего набора и преобразует числовые столбцы SQL в номера PHP, если диапазон значений типа данных PHP позволяет это. Именно такой образ, например, столбцы SQL INT возвращаются в виде целых чисел.

клиентская библиотека MySQL вернет все поля в виде строк.

другим решением было бы использовать параметры json_encode с JSON_NUMERIC_CHECK.

например:

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

Я только что столкнулся с этой же проблемой! Для тех из вас, кто ищет более подходящее решение, вы можете проверить $casts свойство для красноречивых моделей.

принятое решение будет работать, но оно также преобразует поля, которые вы не хотите преобразовывать. Я бы рекомендовал добавить это к вашей красноречивой модели:

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

это преобразует значения непосредственно в объекте модели, поэтому вам не нужно будет беспокоиться об обновлении нескольких конечная точка. Надеюсь, это поможет другим, как помогло мне!