Reputation: 5947
I have one more field on the database over the created_at
and updated_at
as TIMESTAMP
the field name is date.
So i overwritten the method getDates()
on my model eloquent because i wanted that field be instantiated from Carbon.
public function getDates()
{
return ['date','created_at','updated_at'];
}
But when i go to create a new record on the database it throw me an exception:
InvalidArgumentException Unexpected data found. Unexpected data found. Unexpected data found.
Ps: the value sent from the form is in EU format: d-m-Y h:i
I don't know how figure out this problem any suggestion are appreciated
Upvotes: 14
Views: 27793
Reputation: 1609
Even though its a year old issue and I'm placing my input for anyone still struggling even after setting the mutator.
If the html input date element passes the date in atom format(1975-12-25T14:15:16-05:00) then the date mutator won't help. You need to apply the following fix in Illuminate\Database\Eloquent\Model class at line#2848 to get it work (in laravel#5).
$value = Carbon::createFromFormat($format, (new DateTime($value))->format('Y-m-d H:i:s'));
Upvotes: -1
Reputation: 39
Try this:
Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);
Upvotes: 1
Reputation: 4150
You can't use your format "d-m-Y h:i"
You must use one of those: UNIX timestamp, date string (Y-m-d), date-time string, DateTime / Carbon instance
https://laravel.com/docs/4.2/eloquent#accessors-and-mutators
Upvotes: 0
Reputation: 81167
You array returned from getDates was merged with the dafault one resulting in:
['created_at','updated_at','deleted_at','date','created_at','updated_at'];
so use only 'date' there and should be fine.
Try setting up a mutator for 'date' to convert the data from input into timestamp format. The error you get is not on Eloquent but Carbon.
public function setDateAttribute($value)
{
$this->attributes['date'] = Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}
Also there is mistake in the docs, as getDates defines date accessors, not mutators..
Upvotes: 14