Контроллер 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' ];
это преобразует значения непосредственно в объекте модели, поэтому вам не нужно будет беспокоиться об обновлении нескольких конечная точка. Надеюсь, это поможет другим, как помогло мне!