Dados inesperados encontrados durante o salvamento no eloquent/Laravel
-
21-12-2019 - |
Pergunta
Eu tenho mais um campo no banco de dados sobre o created_at
e updated_at
como TIMESTAMP
o nome do campo é data.
Então eu sobrescrevi o método getDates()
no meu modelo eloqüente porque eu queria que esse campo fosse instanciado do Carbon.
public function getDates()
{
return ['date','created_at','updated_at'];
}
Mas quando vou criar um novo registro no banco de dados, surge uma exceção:
InvalidArgumentException Dados inesperados encontrados.Dados inesperados encontrados.Dados inesperados encontrados.
Ps:o valor enviado do formulário está no formato EU: d-m-Y h:i
Não sei como resolver esse problema, qualquer sugestão será apreciada
Solução
Seu array retornado de getDates foi mesclado com o padrão resultando em:
['created_at','updated_at','deleted_at','date','created_at','updated_at'];
então use apenas 'data' lá e deve ficar bem.
Tente configurar um modificador para 'data' para converter os dados de entrada em formato de carimbo de data / hora.O erro que você recebe não está no Eloquent, mas no Carbon.
public function setDateAttribute($value)
{
$this->attributes['date'] = Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}
Também há erros nos documentos, pois getDates define acessadores de data, não modificadores.
Outras dicas
Experimente isto:
Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);
Você não pode usar o formato "d-m-Y h:i"
Você deve usar um desses:Carimbo de data/hora UNIX, string de data (Ymd), string de data e hora, instância DateTime/Carbon
https://laravel.com/docs/4.2/eloquent#accessors-and-mutators
Mesmo que seja um problema de um ano e eu esteja dando minha opinião para qualquer um que ainda esteja lutando, mesmo depois de configurar o mutador.
Se o elemento de data de entrada html passar a data no formato atom (1975-12-25T14:15:16-05:00) então o modificador de data não ajudará.Você precisa aplicar a seguinte correção na classe Illuminate\Database\Eloquent\Model na linha #2848 para que funcione (em laravel #5).
$value = Carbon::createFromFormat($format, (new DateTime($value))->format('Y-m-d H:i:s'));