私の開発サーバーでは、Laravel 5コントローラーからのJSON応答は正しいタイプのデータを表示します。
例えば
imdb_rating: 7.6
imdb_votes: 6271
しかし、運用サーバーでは、JSON応答は文字列として返されます。
imdb_rating: "7.60"
imdb_votes: "6271"
開発版と本番版の両方に同じバージョンのPHP=(5.6.11-1)がインストールされています。
この行動を引き起こしている可能性のあるアイデアはありますか?
必ずネイティブデータ型をサポートする 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);
私はちょうどこの同じ問題に出くわしました!より適切なソリューションをお探しの方は、 $casts
Eloquentモデルのプロパティ。
受け入れられたソリューションは機能しますが、変換したくないフィールドも変換します。 Eloquentモデルにこれを追加することをお勧めします。
protected $casts = [ 'imdb_rating' => 'float', 'imdb_votes' => 'integer' ];
これにより、モデルオブジェクトの値が直接変換されるため、複数のエンドポイントの更新について心配する必要はありません。これが私と同じように他の人にも役立つことを願っています!