2017-05-08 30 views
-1

我正在做一個更新,並獲得碳:: now()的日期;碳toTimeString不更新

$dt = Carbon::now();     
'date'   => $dt->toDateString(), 
'time'   => $dt->toTimeString(), 

當我檢查數據庫時,我的日期字段具有基於當前日期的適當日期字符串。當我檢查時間字段(MySQL中的日期時間字段)時,我只看到0000-00-00 00:00:000,沒有更新。

我是否需要將數據庫字段類型更改爲其他值,或者是否需要調用其他值以獲取碳:: now()的時間。 ?

+0

爲什麼在MySQL和PHP都有辦法做到這一點時,將日期時間分解爲其成分?此解決方案可能會導致錯誤,因爲您只能更新日期或時間並最終導致不一致。 – apokryfos

回答

1

datetime場期待一個字符串像YYYY-MM-DD HH:MM:SStoTimeString功能中,只有返回HH:MM:SS部分。當您嘗試將其插入數據庫時​​,MySQL不知道如何處理它,因此它只將字段設置爲0000-00-00 00:00:00

當插入日期時間字段時,請使用功能toDateTimeString()

'date'   => $dt->toDateString(), 
'time'   => $dt->toDateTimeString(), 
0

您應該將數據存儲爲時間戳。

然後,也許在您的模型中添加一個日期增變器以將它們轉換爲碳實例。

class User extends Model 
{ 
    /** 
    * The attributes that should be mutated to dates. 
    * 
    * @var array 
    */ 
    protected $dates = [ 
     'created_at', 
     'updated_at', 
     'deleted_at' 
    ]; 
} 

https://laravel.com/docs/5.4/eloquent-mutators#date-mutators

然後輸出/使用,您可以使用碳的字符串格式化的日期..

$this->created_at->toTimeString() // 14:15:16 
0

檢查,如果你把與其他$可填寫的日期和時間列模型內部。

class YourModel extends Model 
{ 
    protected $fillable = [ 
     'date_column', 
     'time_column', 
    ]; 
}