14

我在数据库上多了一个字段created_atupdated_at因为TIMESTAMP字段名称是日期。

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

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

但是当我在数据库上创建一条新记录时,它会抛出一个异常:

InvalidArgumentException 发现意外数据。发现意外数据。发现意外数据。

ps:表单发送的值是欧盟格式的:d-m-Y h:i

我不知道如何解决这个问题任何建议都值得赞赏

4

4 回答 4

14

您从 getDates 返回的数组与默认值合并,导致:

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

所以在那里只使用“日期”,应该没问题。


尝试为“日期”设置一个修改器,以将数据从输入转换为时间戳格式。你得到的错误不是 Eloquent 而是 Carbon。

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

文档中也存在错误,因为 getDates 定义了日期访问器,而不是修改器。

于 2014-04-13T12:25:49.390 回答
1

试试这个:

Carbon::createFromFormat('d.m.Y H:i', $request->publishdate);    
于 2016-10-24T12:08:44.157 回答
0

你不能使用你的格式“dmY h:i”

您必须使用其中之一:UNIX 时间戳、日期字符串 (Ymd)、日期时间字符串、DateTime / Carbon 实例

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

于 2016-01-06T14:37:29.947 回答
-1

即使它已经有一年的历史了,而且我正在为即使在设置了变异器之后仍然在苦苦挣扎的任何人提供我的意见。

如果 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'));
于 2015-03-23T06:01:31.347 回答