2014-10-22 86 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]);