2017-04-22 109 views
1

我有一個Message模式是這樣的:返回UNIX時間戳格式日期時間格式字段laravel

class Message extends Model 
{ 
    protected $primaryKey = 'message_id'; 
    protected $dates  = ['created_at', 'updated_at', 'receiver_deleted_at', 'sender_deleted_at', 'sender_read_at', 'receiver_read_at']; 
} 

正如你可以看到有持有日期爲DATETIME(YYYY-MM-DD一些日期字段HH:MM:SS)格式。

但我希望當得到一個模型的實例所有日期字段轉換爲unix時間戳格式,然後返回。

我知道可以使用訪問這樣每個字段:

public function getCreatedAtAttribute() 
{ 
    dd(strtotime($this->attributes['created_at'])); 
    return strtotime($this->attributes['created_at']); 
} 

但在這種情況下,我必須定義上面像一個函數的每個字段。

但我想要一個更簡單的方式強制模型返回日期字段爲unix時間戳格式。

+0

訪問器負責轉換爲Carbon實例,該實例是默認DateTime的擴展。所以,'$ this-> created_at-> format('U');'應該可以工作。 –

+0

@TomLank。,我想調用模型轉換格式實例返回 –

回答

1

您可以覆蓋:

protected function getDateFormat() 
{ 
return 'U'; 
} 

OR

使用時間戳屬性爲每列:

$model->created_at->timestamp 

參考:https://laravel.com/docs/4.2/eloquent#timestamps

+0

我添加了'getDateFormat'函數,但得到這個錯誤:'尾隨數據' –

0

可以重寫asDateTime()方法在型號:

protected function asDateTime($value) 
{ 
    return Carbon::parse($value)->timestamp; 
} 

這將工作就像你創建的每個這是$dates陣列(包括created_atupdated_at)日期的訪問。

+0

我試過你的代碼,並將其添加到模型,但在這種情況下,我得到了這個錯誤:'參數1傳遞給Illuminate \\ Database \\ Eloquent \\ Model :: serializeDate()必須實現接口DateTimeInterface,給定的整數,在D中調用:\\ wamp \\ www \\ pars-app \\ vendor \\ laravel \\ framework \\ src \\照亮\\ Database \\ Eloquent \\ Model.php 2446行,並定義了' –

+0

@ABDeveloper也許你沒有刪除casts屬性或訪問器或什麼東西?我在發佈之前已經試過了,它在5.3中完美運行。 –

+0

我還沒有任何與日期字段相關的強制屬性或訪問器。 –

相關問題