Laravel Carbon Fehlende Daten
In meinem Modell habe ich Folgendes:
protected $dates = [
'start',
'end',
'created_at',
'updated_at'
];
Ich bin mit einem datetime-picker legen Sie die start-und end-Datum in diesem format:
2016-01-23 22:00
Ohne die Sekunden. Wenn ich es so mache, bekomme ich diesen Fehler:
InvalidArgumentException in Carbon.php line 425:
Data missing
at Carbon::createFromFormat('Y-m-d H:i:s', '2016-01-23 22:00') in Model.php line 3015
Wenn ich weiß sind die Sekunden, es funktioniert. Die Sekunden sind für mich nicht wichtig, und ich will nicht, um Sie in meinem datetime-picker-Felder. Jeder Weg, um dieses, so kann ich immer noch verwenden Sie diese Felder als Datumsfelder?
Du musst angemeldet sein, um einen Kommentar abzugeben.
tl;dr
Ihre Datums-string und dein Datumsformat ist anders, müssen Sie ändern Sie den format-string ein oder ändern Sie die Datums-Zeichenfolge, so dass Sie übereinstimmen.
Erklärung
Das Problem
Dieser Fehler entsteht, wenn Kohlenstoff ist
createFromFormat
Funktion receieves eine Datums-Zeichenfolge, die nicht mit dem übergebenen format string. Genauer gesagt das kommt von derDateTime::createFromFormat
Funktion, da Carbon nur Anrufe:Nicht genug Daten
Wenn Ihr Datum ein string "kleiner" als der string format, wie in diesem Fall:
Carbon werfen:
Zu viel Daten
Wenn Ihr den Datums-string ist "mehr" als format-string, wie in diesem Fall:
Carbon werfen:
Unter der Haube
Entsprechend der Dokumentation über Mutatoren das Standard-Datum-format ist:
'Y-m-d H:i:s'
. Die Datenverarbeitung geschieht in der Modell sasDateTime
- Funktion. In der letzten Bedingung dergetDateFormat
- Funktion genannt wird, das ist, wo das benutzerdefinierte format kommt. Das Standard-format ist die in der Datenbank definiert istGrammatik
Klasse.Lösung
Müssen Sie sicherstellen, dass Datum-string entspricht dem format-string.
Ändern Sie die format-string -
Sie können den Standardwert überschreiben, format-string wie diesen:
Gibt es zwei problem mit diesem Ansatz:
$dates
array.Bearbeiten und formatieren von Datums-Zeichenketten
Meine empfohlene Lösung ist es, dass das Datum-format bleiben sollten, die Standard -
'Y-m-d H:i:s'
und Sie sollten füllen Sie die fehlenden Teile des Datums, wie dieser:Und wenn Sie wollen, um das Datum sollten Sie format:
Natürlich die Felder werden sollte, mutierte zu Termine:
Können Sie die $dateFormat in Ihrem Modell als Christian sagt, aber wenn Sie nicht wollen, zu unterstellen, die updated_at und created_at Felder in der operation, die Sie verwenden können Veranstaltungen zu "korrigieren" das datetime-Objekt vor dem speichern in die Datenbank.
Hier haben Sie die offizielle doc darüber: https://laravel.com/docs/5.2/eloquent#events
$dateFormat
option.Modelle
Diese Funktion deaktiviert, werden die Simulationen für Kohlenstoff in Datetimes
https://laravel.com/docs/5.0/eloquent#date-mutators
Müssen Sie
protected $dateFormat
zu'Y-m-d H:i
' in Ihrem Modell finden Sie unter https://laravel.com/docs/5.2/eloquent-mutators#date-mutatorsAchten Sie darauf, nicht weglassen der "created_at" oder "updated_at" Felder in einigen Zeilen in der Datenbank, die erforderlich sind; wenn das der Fall ist, löschen Sie die Datensätze, wo Sie müssen alle leeren Felder oder geben Sie einen Wert in den gültigen timestamp-format, Beispiel '2018-09-01 15:18:53'.
Dies ist eine Möglichkeit
Müssen Sie die Spalte der resultierenden Daten. Wenn die Spalte name 'created_at' oder 'updated_at' null ist, dann wird es durch diese Fehler.
, Wie zu Lösen ?
Zuerst von allen, müssen Sie zum speichern der Daten in den zwei Spalten mit Laravel carbon.
Eg:
So, ich hoffe, es wird
Happy Coding....