Beim Speichern auf eloquent / Laravel wurden unerwartete Daten gefunden
-
21-12-2019 - |
Frage
Ich habe ein weiteres Feld in der Datenbank über dem created_at
Und updated_at
als TIMESTAMP
Der Feldname ist Datum.
Also habe ich die Methode überschrieben getDates()
auf meinem Modell eloquent, weil ich wollte, dass dieses Feld aus Carbon instanziiert wird.
public function getDates()
{
return ['date','created_at','updated_at'];
}
Aber wenn ich einen neuen Datensatz in der Datenbank erstelle, wird eine Ausnahme ausgelöst:
InvalidArgumentException Unerwartete Daten gefunden.Unerwartete Daten gefunden.Unerwartete Daten gefunden.
Ps:Der vom Formular gesendete Wert liegt im EU-Format vor: d-m-Y h:i
Ich weiß nicht, wie ich dieses Problem lösen kann. Jeder Vorschlag ist willkommen
Lösung
Ihr von getDates zurückgegebenes Array wurde mit dem Standard-Array zusammengeführt, was zu Folgendem führte:
['created_at','updated_at','deleted_at','date','created_at','updated_at'];
Verwenden Sie dort also nur „Datum“, und das sollte in Ordnung sein.
Versuchen Sie, einen Mutator für „Datum“ einzurichten, um die Daten von der Eingabe in das Zeitstempelformat zu konvertieren.Der Fehler, den Sie erhalten, liegt nicht bei Eloquent, sondern bei Carbon.
public function setDateAttribute($value)
{
$this->attributes['date'] = Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}
Außerdem gibt es einen Fehler in den Dokumenten, da getDates Datumszugriffsfunktionen und keine Mutatoren definiert.
Andere Tipps
Versuche dies:
Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);
Sie können Ihr Format „d-m-Y h:i“ nicht verwenden.
Sie müssen eines davon verwenden:UNIX-Zeitstempel, Datumszeichenfolge (Y-m-d), Datum-Uhrzeit-Zeichenfolge, DateTime/Carbon-Instanz
https://laravel.com/docs/4.2/eloquent#accessors-and-mutators
Auch wenn das Problem schon ein Jahr alt ist und ich meinen Beitrag für alle leiste, die auch nach dem Setzen des Mutators immer noch Probleme haben.
Wenn das HTML-Eingabeelement „Datum“ das Datum im Atomformat (1975-12-25T14:15:16-05:00) übergibt, hilft der Datumsmutator nicht.Sie müssen den folgenden Fix in der Klasse Illuminate\Database\Eloquent\Model in Zeile Nr. 2848 anwenden, damit es funktioniert (in Laravel Nr. 5).
$value = Carbon::createFromFormat($format, (new DateTime($value))->format('Y-m-d H:i:s'));