2016-06-16 8 views
0

Ich habe in Modell:Laravel: Wie wird das Datumsformat beim Modellattribut-Casting festgelegt?

protected $casts = [ 
    'date' => 'date', 
]; 

Hat eine gewisse Fähigkeit Laravel haben Guss Format zu setzen, so etwas wie:

protected $casts = [ 
    'date' => 'date_format:d/m/yyyy', 
]; 

?

EDITED

Ich versuchte dies:

Im Modell:

protected $dateFormat = 'm/d/Y'; 

protected $dates = ['driver_expiration', 'created_at', 'updated_at', 'deleted_at']; 

protected $casts = [ 
    'driver_expiration'  => 'date', 
]; 

Ich speicherte Datum (driver_expiration) als '01/012016' , aber Datum 0000-00-00 gespeichert wird.

Laravel Dokumentation: https://laravel.com/docs/5.1/eloquent-mutators Sagen Sie uns $ Datumsformat funktioniert nur für Zeitstempel ('created_at', 'updated_at', 'deleted_at')

Antwort

8

Statt ein Datumsformat des Gießens, können Sie Mutatoren das Format einstellen Sie mögen:

zum Beispiel, wenn Ihre Spalte date genannt wurde, können Sie die folgende Funktion zum Modell hinzufügen:

public function setDateAttribute($value) { 
    $this->attributes['date'] = (new Carbon($value))->format('d/m/y'); 
} 

die setDateAttribute ist immer im Format set[ColumnName]Attribute, mit CamelCase. Der date im $this->attributes['date'] Teil muss auch mit Ihrem tatsächlichen Spaltennamen in der Tabelle übereinstimmen.

Wenn Sie create oder update einen Datensatz in Ihrer Datenbank eingeben, wird das Format automatisch durch die obige Funktion geändert.

Hinweis: Sie müssen möglicherweise die use Carbon\Carbon-Anweisung oben auf Ihrem Modell hinzufügen, um die Carbon-Bibliothek zu verwenden.

Take a look at other examples here.


UPDATE

Optional können Sie ein Format für date Spalten mit definieren:

protected $dateFormat = 'Y-m-d'; 
+1

Ich möchte nicht 1000 Mutatoren, und Code wiederholen .... Array ist eleganter und praktischer. – fico7489

+0

@ fico7489 auch Sie können Modelle dateformat verwenden, gibt es keine Möglichkeit, dies in den Güssen standardmäßig zu tun – GONG

+0

@ fico7489 https://github.com/illuminate/database/blob/5.1/Eloquent/Model.php#L2796 hier ist der Beweis , scheint wie Casts mit '$ dateFormat' zum Formatieren – GONG

0

ich neue Modell Eigenschaft erstellen:

protected $datesConvert = ['driver_expiration']; 

Und dann habe ich aktualisiert mein Basismodell wie:

public function save(array $options = []) 
{ 
    if(isset($this->datesConvert)){ 
     foreach($this->datesConvert as $date){ 
      $this->attributes[$date] = \Carbon\Carbon::createFromFormat('d/m/Y', $this->attributes[$date])->format('Y-m-d'); 
     } 
    } 

    parent::save($options); 

} 

public function getAttribute($key) 
{ 
    $value = parent::getAttribute($key); 

    if(isset($this->attributes[$key])){ 
     if(isset($this->datesConvert) && in_array($key, $this->datesConvert)){ 
      $value = \Carbon\Carbon::createFromFormat('Y-m-d', $value)->format('d/m/Y'); 
     } 

    } 

    return $value; 
} 

und diese Lösung funktioniert für mich. Der Code kann in die Eigenschaft verschoben werden.Das Format kann in $ datesConvert Format = 'd/m/Y';

1

Fügen Sie einfach zum Modell:

protected function asDateTime($value) 
{ 
    return parent::asDateTime($value)->format('d/m/y'); 
} 

dieses ursprünglich der Eloquent Verfahren zur Herstellung einer Kohlenstoff-Instanz zurückgeben, so können Sie diese Instanz erhalten und ruft zu sein Format() -Methode. Wenn Sie diese Lösung auf alle Modelle anwenden möchten, erstellen Sie einfach eine neue Klasse, die von Eloquent erweitert wurde, und legen Sie diese Methode dort ab, sodass Sie die Modelle aus dieser neuen Klasse erweitern können.

Verwandte Themen