2014-04-13 18 views
9

Ho un altro campo nel database su created_at e updated_at come TIMESTAMP il nome del campo è la data.Dati imprevisti trovati durante il salvataggio su eloquente/Laravel

Così ho sovrascritto il metodo getDates() sul mio modello eloquente perché volevo che il campo sia istanziato da Carbon.

public function getDates() 
{ 
    return ['date','created_at','updated_at']; 
} 

Ma quando vado a creare un nuovo record sul database mi ha un'eccezione:

InvalidArgumentException dati imprevisti trovato. Dati inaspettati trovati. Rilevati dati inattesi.

Ps: il valore inviato dal modulo è in formato UE: d-m-Y h:i

Non so come capire questo problema ogni suggerimento sono apprezzati

+0

Hai la soluzione nella mia risposta ora. –

risposta

10

È matrice restituita da getDates è stata fusa con quello dafault conseguente:

['created_at','updated_at','deleted_at','date','created_at','updated_at']; 

in modo da utilizzare solo 'data' lì e dovrebbe andare bene.


Prova la creazione di un mutatore per 'data' per convertire i dati da un input in formato timestamp. L'errore che ottieni non è su Eloquent ma su Carbon.

public function setDateAttribute($value) 
{ 
    $this->attributes['date'] = Carbon\Carbon::createFromFormat('d-m-Y h:i', $value); 
} 

Inoltre v'è errore nei documenti, come getDates definisce funzioni di accesso data, non mutatori ..

+0

Provato ma non sembra essere questo il problema, grazie. In ogni caso non viene unito ma viene sovrascritto. – Fabrizio

+0

Sì, mio ​​cattivo. Mi sono appena reso conto di quale sia il problema. Controlla la modifica. –

+0

Sì questa è la risposta giusta ho provato in questo modo per vedere se funziona e lo fa. :) Grazie compagno. – Fabrizio

0

Anche se la sua emissione di un anno e sto mettendo il mio ingresso per tutti coloro che ancora lottano anche dopo aver impostato il mutatore.

Se l'elemento di data di input HTML passa la data in formato atom (1975-12-25T14: 15: 16-05: 00), il mutatore della data non sarà di aiuto. È necessario applicare la seguente correzione nella classe Illuminate \ Database \ Eloquent \ Model alla riga # 2848 per farlo funzionare (in laravel # 5).

$ value = Carbon :: createFromFormat (formato $, (nuovo valore DateTime (valore $)) -> ('Y-m-d H: i: s'));

1

Prova questo:

Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);  
Problemi correlati