2013-10-04 10 views
9

Laravel passa automaticamente lo created_at e lo updated_at (da un modello Eloquent) a una nuova istanza Carbon, come da documentazione.Come gestire date non impostate/predefinite in Laravel? (con Carbon)

Sembra tuttavia, che se il valore è predefinito 0000-00-00 00:00:00 emette il seguente: -0001-11-30 06:12:32 per tutti 0000-00-00 00:00:00 valori.

I campi sono impostati sul tipo di marca temporale.

Attualmente sto utilizzando il seguente (all'interno del modello), ma è maldestro doverlo fare su tutti i modelli Laravel che potrebbero contenere una data predefinita/non impostata.

public function getCreatedAtAttribute($value) { 
    return $value == "0000-00-00 00:00:00" ? "0000-00-00 00:00:00" : $value; 
} 
+0

"è maldestro doverlo fare su tutti i modelli Laravel che potrebbero contenere una data predefinita/non impostata." potresti metterlo in un BaseModel che estende il Modello, e avere tutti i tuoi modelli estendere il BaseModel. –

risposta

2

Non sembra esserci un modo pulito per farlo. Quindi sono andato con:

public function getCreatedAtAttribute($value) { 
    return $value == "0000-00-00 00:00:00" ? "0000-00-00 00:00:00" : $value; 
} 
2

Questo accade nel metodo getAttributeValue, in model.php

elseif (in_array($key, $this->getDates())) 
    { 
     if ($value) return $this->asDateTime($value); 
    } 

mentre viene passato al metodo asDateTime. Questo potrebbe essere risolto con qualcosa come

elseif (in_array($key, $this->getDates())) 
    { 
     if ($value && $value !== '0000-00-00 00:00:00') return $this->asDateTime($value); 
    } 

Questo potrebbe essere un problema per una richiesta di pull?

+0

Ehi, non capisco la tua risposta, ma è contrassegnata come corretta. Stai solo dicendo che Laravel 4 non ha un bel modo per questo e che la soluzione di Chris è l'unica disponibile? – Mauro

+0

@MAuro Buon punto, ho finito per cercare la soluzione nella mia domanda iniziale. Quindi lo posterò come risposta e lo contrassegnerò come accettato – Chris

Problemi correlati