在保存eloquent/Laravel期间发现的意外数据
-
21-12-2019 - |
题
我在数据库上还有一个字段。 created_at
和 updated_at
作为 TIMESTAMP
字段名称为日期。
所以我复盖了方法 getDates()
在我的模型上雄辩,因为我希望该字段从碳实例化。
public function getDates()
{
return ['date','created_at','updated_at'];
}
但是当我在数据库上创建一个新记录时,它会给我一个异常:
InvalidArgumentException发现意外数据。发现意外数据。发现意外数据。
Ps:从表单发送的值为EU格式: d-m-Y h:i
不知道如何弄清楚这个问题任何建议表示赞赏
解决方案
从getDates返回的数组与dafault数组合并,导致:
['created_at','updated_at','deleted_at','date','created_at','updated_at'];
所以在那里只使用'日期',应该没问题。
尝试为'date'设置一个mutator,将数据从输入转换为时间戳格式。你得到的错误不是雄辩,而是碳。
public function setDateAttribute($value)
{
$this->attributes['date'] = Carbon\Carbon::createFromFormat('d-m-Y h:i', $value);
}
在文档中也有错误,因为getDates定义了日期访问器,而不是突变器。.
其他提示
试试这个:
Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);
你不能使用你的格式"d-m-Y h:i"
你必须使用其中的一种:UNIX时间戳,日期字符串(Y-m-d),日期时间字符串,日期时间/碳实例
https://laravel.com/docs/4.2/eloquent#accessors-and-mutators
尽管这是一个一年的问题,我把我的输入给任何人仍然挣扎,即使设置了突变器。
如果html input date元素以atom格式传递日期(1975-12-25t14:15:16-05:00),那么日期突变器将无济于事。您需要在第2848行的Illuminate\Database\Eloquent\Model类中应用以下修复以使其工作(在laravel#5中)。
$value = Carbon::createFromFormat($format, (new DateTime($value))->format('Y-m-d H:i:s'));
不隶属于 StackOverflow