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

Foi útil?

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'));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top