2014-10-22 91 views
13

我似乎无法用Laravel在数据库表中插入created_at数据。 我试图从POST获取该数据,然后尝试将其保存到数据库。用Laravel插入created_at数据

目前,我正在做这样的:

$create_dt = date("Y-m-d H:i:s A", strtotime($_POST['post_date']." ".$_POST['post_time'])); 
$name = $_POST['name']; 

$post = new Post(); 
$post->name = $name; 
... 
$post->created_at = $create_dt; 
$post->save(); 

但它给出了一个错误:

Uncaught exception 'InvalidArgumentException' with message in Carbon.php 

Unexpected data found. Unexpected data found. Data missing in Carbon.php 

我该如何解决这个问题?我需要在我的模型中设置$timestamps为false吗? (我真的不希望这样做,因为我很好如何自动插入updated_at

+2

如果在模型中启用'$ timestamps',Laravel将自动设置created_at字段。 – Jerodev 2014-10-22 11:50:05

+0

您是否真的允许用户手动输入日期/时间(绝不相信用户输入) – 2014-10-22 11:50:44

+0

@Jerodev @MarkBaker我需要手动插入'created_at'时间,因为用户应该能够在将来安排一篇文章。我只给了'User'模型作为例子。 – maxxon15 2014-10-22 11:53:43

回答

19

在你User模型中,添加以下行的User类:

protected $timestamps = true; 

现在,每当您保存或更新用户,Laravel将自动更新created_atupdated_at字段。


更新:
如果你想设置的创建在手动你应该使用的日期格式Y-m-d H:i:s。问题是您使用的格式与Laravel用于created_at字段的格式不同。

+0

我需要手动插入'created_at'日期,因为用户应该能够在将来安排一个帖子。 'updated_at'应该像Laravel那样自动插入 – maxxon15 2014-10-22 11:57:12

+0

我已经更新了我对您编辑的答案。 – Jerodev 2014-10-22 12:01:19

+0

我用过Y-m-d H:i:s A'。我应该只是放下AM/PM部分? – maxxon15 2014-10-22 12:03:21

14

为此,可以使用Laravel手动设定,只要记住 'created_at' 添加到您的$可填写阵列:

protected $fillable = ['name', 'created_at']; 
+2

没有必要手动执行此操作。当我们第一次插入时,Laravel已经做到了。大部分是 – 2016-05-26 01:47:37

+1

- 有时你可能想稍微改变一下(可能是api的延迟?) – 2016-09-07 17:38:30

6
$data = array(); 
$data['created_at'] =new \DateTime(); 
DB::table('practice')->insert($data); 
0

目前(Laravel 5.4),以实现这一目标的方法是:

$model = new Model(); 
$model->created_at = Carbon::now(); 
$model->save(['timestamps' => false]);