web-dev-qa-db-ja.com

Laravel 5文字列としてJSON整数を送信するコントローラー

私の開発サーバーでは、Laravel 5コントローラーからのJSON応答は正しいタイプのデータを表示します。

例えば

imdb_rating: 7.6
imdb_votes: 6271

しかし、運用サーバーでは、JSON応答は文字列として返されます。

imdb_rating: "7.60"
imdb_votes: "6271"

開発版と本番版の両方に同じバージョンのPHP=(5.6.11-1)がインストールされています。

この行動を引き起こしている可能性のあるアイデアはありますか?

26
Muggles

必ずネイティブデータ型をサポートする MySQL Native Driver を使用してください。

Mysqlndライブラリを使用している場合、MYSQLI_OPT_INT_AND_FLOAT_NATIVE接続オプションを設定することにより、整数列と浮動小数点列をPHP数値に戻すことができます。設定すると、mysqlndライブラリは結果セットのメタデータ列タイプをチェックします数値SQL列をPHP数値に変換します。PHPデータ型の値の範囲で許可されている場合。このように、SQL INT列は次のように返されます。整数。

MySQLクライアントライブラリは、すべてのフィールドを文字列として返します。

別の解決策は、JSON_NUMERIC_CHECKでjson_encodeオプションを使用することです。

例えば:

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

私はちょうどこの同じ問題に出くわしました!より適切なソリューションをお探しの方は、 $casts Eloquentモデルのプロパティ。

受け入れられたソリューションは機能しますが、変換したくないフィールドも変換します。 Eloquentモデルにこれを追加することをお勧めします。

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

これにより、モデルオブジェクトの値が直接変換されるため、複数のエンドポイントの更新について心配する必要はありません。これが私と同じように他の人にも役立つことを願っています!

53