Laravel 5 controller senden JSON integer als string
Auf meinem Entwicklungs-server die JSON-Antwort vom Laravel 5 controller zeigt die Daten in die richtigen Typen.
e.g
imdb_rating: 7.6
imdb_votes: 6271
Aber auf den Produktions-server, der JSON-Antwort zurück geschickt als strings.
imdb_rating: "7.60"
imdb_votes: "6271"
Sowohl die Entwicklung und Produktion, die gleiche version von PHP installiert (5.6.11-1).
Irgendwelche Ideen auf, was verursacht dieses Verhalten?
- Die Daten kommen aus der mysql-Tabelle?
- Ja
- Klingt vielleicht blöd, aber können Sie überprüfen, ob Sie mit dem MySQL Native Driver (mysqlnd) auf beiden Maschinen? MySQL Client Library-Treiber der Rückkehr alle Felder als Zeichenketten unabhängig von der Art, was nicht der Fall ist bei der Verwendung von MySQL-Native-Treiber
- Gut, mit der PHP-version 5.6, die Sie vermutlich nicht.
- Haben Sie versucht, die
return response()->json(["foo" => "bar"], 200, [], JSON_NUMERIC_CHECK);
? - du hast Recht - die Produktion-system war nicht mit dem nativen Treiber!
- könnten Sie poste es als Antwort.
- Ich habe eine Antwort. Könnte gut sein, für andere, die kommen über diese.
- Seien Sie vorsichtig bei der Verwendung der JSON_NUMERIC_CHECK Flagge. Wenn Sie Zeichenfolgen wie "004004004" in Ihrer Datenbank (eine Telefonnummer zum Beispiel), die json-Antwort wird analysiert als "4004004"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass Sie MySQL-Native-Treiber die Unterstützung für native Datentypen.
MySQL-Client-Bibliothek werden wieder alle Felder als strings.
Andere Lösung wäre, verwenden Sie die Funktionen json_encode Optionen mit
JSON_NUMERIC_CHECK
.Beispiel:
apt-get remove php5-mysql
,apt-get install php5-mysqlnd
,service apache2 restart
Ich lief in das gleiche Problem! Für diejenigen von Euch, die auf der Suche nach einer geeigneten Lösung, möchten Sie vielleicht zu prüfen, die
$CASTET
Eigenschaft für aussagekräftige Modelle.Die akzeptierte Lösung wird funktionieren, aber es wird auch konvertieren Sie Felder, die Sie nicht wollen umgewandelt. Ich würde empfehlen, hinzufügen dieses zu Ihrem Beredten Modell:
Diese konvertieren die Werte direkt in Ihrer Modell-Objekt, so dass Sie nicht brauchen, um über die Aktualisierung mehrere Endpunkte. Ich hoffe, das hilft anderen, da er mir getan hat!