2015-10-05 72 views
0

我目前正在學習Laravel和Eloquent,並且已經設置了一些最初的遷移來玩。我的一個表只需要創建時間,因爲一旦插入某一行的存在,它永遠不會被更新:Laravel的雄辯可以更新創建時間,但不是更新時間嗎?

// The run table only needs a creation timestamp, not an updated timestamp 
    Schema::create('runs', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->timestamp('created_at'); 
    }); 

我明白,能言善辯的默認預計既是created_atupdated_at列存在,並且該功能可以完全關閉。從手冊:

默認情況下,Eloquent預期created_at和updated_at列存在於您的表上。如果您不希望通過Eloquent自動管理這些列,請將模型上的$timestamps屬性設置爲false。

但是,是否可以要求雄辯自動設置創建時間而不是更新時間?我意識到我可以手動執行此操作,但如果Eloquent可以「免費」執行此操作,那將會很好。

+0

[一個簡單的解決方案](http://stackoverflow.com/q/18067614),我現在正在使用的是在數據庫級別設置默認列值,並關閉Eloquent中的時間戳記功能。 – halfer

回答

1

簡答:沒有。

我看看framework/src/Illuminate/Database/Eloquent/Model.php它處理時間戳,它不是直接可能的。

你可以重寫一堆的方法,使其工作:

  • public function setUpdatedAt($value)
  • 任何地方有到static::UPDATED_AT
  • 任何地方的引用取決於usesTimestamps()
  • ,當然其他地方的價值

充其量,這將是脆弱的適用於未來的代碼更改,所以我不推薦它。

+0

一個很好的直接答案,謝謝!沒問題 - 我會堅持使用手動方法。 – halfer