在eloquent / Laravel上保存期间发现意外数据

时间:2014-04-13 12:17:10

标签: php laravel-4 eloquent php-carbon

我在created_atupdated_at上的数据库上还有一个字段,TIMESTAMP字段名称是日期。

所以我在模型上雄辩地覆盖了方法getDates(),因为我希望从Carbon实例化该字段。

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

但是当我在数据库上创建一条新记录时,它给我一个例外:

  

InvalidArgumentException找到意外的数据。发现意外数据。   发现了意外的数据。

Ps:从表单发送的值采用欧盟格式:d-m-Y h:i

我不知道如何弄清楚这个问题是否有任何建议值得赞赏

4 个答案:

答案 0 :(得分:13)

从getDates返回的数组与dafault合并,导致:

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

所以只使用'日期',应该没问题。


尝试为'date'设置mutator,将数据从输入转换为时间戳格式。 你得到的错误不是Eloquent而是Carbon。

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

此外,文档中也存在错误,因为getDates定义了日期访问者,而不是mutators ..

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:0)

即使是一年之久的问题,我也会为那些在设置mutator之后仍在努力的人提供我的意见。

如果html输入日期元素以原子格式(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'));

答案 3 :(得分:0)

你不能使用你的格式" d-m-Y h:i"

您必须使用以下其中之一:UNIX时间戳,日期字符串(Y-m-d),日期时间字符串,DateTime / Carbon实例

https://laravel.com/docs/4.2/eloquent#accessors-and-mutators