php - Контроллер Laravel 5 отправляет целое число JSON в виде строки




laravel-5 php-5.6 (2)

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

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

MySQL Client Library вернет все поля в виде строк.

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

Например:

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

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

например

imdb_rating: 7.6
imdb_votes: 6271

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

imdb_rating: "7.60"
imdb_votes: "6271"

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

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


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

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

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

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





php-5.6