2016-11-29 6 views
3

Ich habe ein Datum, das in einem Datepicker in folgendem FormatLaravel muate Datum vor dem Speichern in der Datenbank?

Y-m-d g:i A 
ausgewählt ist wird

mit AM/PM Also, es folgend in meinem Eingabefeld zeigt, das

korrekt ist

enter image description here

Wenn ich das Formular absende, wird Laravel den Datensatz nicht aktualisieren, da das Format in meinem DATETIME-Feld in mysql unbekannt ist.

Mein 'date' Feld, um die $ Daten Array hinzugefügt wird, so dass es durch Laravel analysiert werden soll

Ich versuchte, einen Mutator auf meinem Modell mit, wie folgend, ohne Erfolg

public function setDateAttribute($value) 
{ 
    $this->attributes['date'] = Carbon::createFromFormat('Y-m-d g:i A', $value)->format('Y-m-d H:i:s'); 
} 

Der ursprüngliche Wert wird nicht aktualisiert. Irgendeine Idee, was ich falsch machen könnte?

Danke

+0

Schlägt es durch Anny Fehler, wenn Sie Formular absenden? –

+0

Nein!Es aktualisiert nur nicht den Wert in meiner Datenbank – Notflip

Antwort

1

Laravel Datum des Mutator erwartet ein Format wie 'Y-m-d H:i:s', aber Sie können das $dateFormat Attribut auf Ihrem Modell verwenden, um ein anderes Format angeben. ZB:

protected $dateFormat = 'Y-m-d g:i A'; 

Schauen Sie sich den Datumsformate Abschnitt in der Dokumentation unter Date Mutators

Alternativ können Sie das Datum mit Hilfe von Kohlenstoff außerhalb des Modells analysieren, weil Attribute in den $dates aufgeführt werden auch Kohlenstoff akzeptieren Instanzen:

$model->date = Carbon::createFromFormat('Y-m-d g:i A', '2016-11-29 02:00 PM'); 

Dies ist der Ansatz, den ich normalerweise verwende. Für mich fühlt sich das eher wie ein Front-End-Problem an, wo Sie versuchen, ein benutzerfreundliches Format zu einem Ihrer Modelle/DB zu erstellen, also werde ich diese Logik normalerweise in einen Controller legen.

+0

Vielen Dank! Ich war so verwirrt mit all dem. Es ist in der Tat offensichtlich, es in der Datenbank unter Verwendung des Standards zu speichern, aber es anders zu zeigen und es dann in der Steuerung neu zu transformieren. – Notflip

2

einen Blick auf Laravel Take date mutators, diese übernimmt die zugreifenden und Mutieren Daten gehen in die und aus der Datenbank für Sie ähnlich wie es mit created_at und die anderen Standarddaten der Fall ist.

Grundsätzlich müssen Sie das date Feld an das $dates Array auf Ihrem Modell wie so hinzuzufügen:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class User extends Model 
{ 
    /** 
    * The attributes that should be mutated to dates. 
    * 
    * @var array 
    */ 
    protected $dates = [ 
     'created_at', // Add if you're using timestamps on the model 
     'updated_at', // Add if you're using timestamps on the model 
     'deleted_at', // Add if you're using softDeletes on the model 
     'date' 
    ]; 
} 

Auf diese Weise, wenn das Modell in der Datenbank beibehalten wird es so als DATETIME erledigt ist, während, wenn sie wird aus der Datenbank in Ihr Modell gelesen es wird eine Carbon Instanz sein

+0

Danke für Ihre Antwort, dies ist bereits der Fall. Ich habe vergessen, es zu meiner Frage hinzuzufügen, ich werde es jetzt hinzufügen. – Notflip

1

Es scheint, dass Ihre Carbon-Funktion in Ordnung ist. Aber warum es nicht funktioniert, verstehe nicht. Aber ich habe eine Lösung mit PHP Datumsfunktion.

public function setDateAttribute($value) 
{ 
    $this->attributes['date'] = date("Y-m-d H:i:s", strtotime($value); 
} 
Verwandte Themen