2015-08-22 67 views
1

已經有很多的問題,詢問如何能夠防止updated_at列從當什麼也沒改變改變。事實上,this was even fixed as a bug.觸摸機型的時間戳而不實際更新模型

不過,我想這樣做正好相反。我希望將updated_at列更新爲當前時間戳,儘管沒有任何更改。本質上,我想touch我的模型,如果你願意。

$ touch MyLaravelModel

有沒有一種簡單的方法做這樣的事情在Laravel?相當於$model->touch()的東西,而不是手動編輯該字段?

我已經嘗試過這樣的事情,但絕對沒有任何反應。

$model = Model::find(1); 
$model->save(); 

的原因,我這樣做是因爲我想用updated_at列基本上保持跟蹤當模特是最後一個「看」的,而不必改變它。有沒有更好的方法來解決這個問題?

這是因爲在這種情況下是從Touching Parent Timestamp不同,我的模型不屬於父母也沒有任何孩子。

+0

哪裏試圖代碼? – aldrin27

+0

@ aldrin27我不確定要嘗試什麼。我想出的最好的方法就是''model-> save()'。然而,根據我的[鏈接](https://github.com/laravel/framework/issues/790)這是一個錯誤,並得到修復。 – Zsw

+0

我認爲你可以使用查詢構建器只觸及'updated_at'和'created_at'列。 – aldrin27

回答

1

你可以使用touch()方法。它在Model抽象類中,並且自至少v4.0以來。

這就是:

/** 
* Update the model's update timestamp. 
* 
* @return bool 
*/ 
public function touch() 
{ 
    $this->updateTimestamps(); 
    return $this->save(); 
} 

使用方法如下:

$model->touch(); 
+0

我不知道**怎麼**我錯過了這個,謝謝。 – Zsw

0

我相信你能做到myObject->保存(),這將更新,即使什麼也沒有改變當前對象的的updated_at領域。因此,讓我們說這是一個用戶:

$myUser = User::find(1); 
$myUser->save() 

我相信,仍然會更新updated_at時間。

+0

它似乎不適合我。據[這](https://github.com/laravel/framework/issues/790),它被認爲是一個錯誤,並已修復。 – Zsw

+0

ahhh我明白了。然後,我爲不正確的答案道歉。目前我唯一想到的解決方案就是您所說的不想做的手動更新時間戳: -/ –