在Laravel框架中,每個Eloquent模型都預設包含了created_at和updated_at兩個時間戳字段。這兩個欄位記錄了模型的建立和更新時間。這樣做的好處是方便記錄資料的更新時間,以及方便實現一些功能,例如按照創建時間和更新時間排序等等。
然而,在某些場景下,我們可能不需要這兩個時間戳字段。例如有些舊的資料庫表可能沒有這兩個字段,或者我們根本不需要記錄資料的建立和更新時間。在這種情況下,我們可以透過在模型中加入下面這兩行程式碼來取消 created_at 和 updated_at:
public $timestamps = false;
這樣做可以在模型中取消 created_at 和 updated_at 欄位。但是要注意的是,取消這兩個時間戳字段會導致一些Laravel內建的功能失效。例如模型無法透過 created_at 和 updated_at 欄位進行排序,也無法自動記錄資料的建立和更新時間。
如果我們只需要取消其中一個時間戳字段,例如只取消created_at,那麼可以這樣做:
// 只取消 created_at const UPDATED_AT = 'updated_at';
這個方法是將UPDATED_AT 常數賦值為updated_at 字串,而預設情況下UPDATED_AT 的值是updated_at,因此這樣做只取消了created_at。
當我們取消了這些時間戳欄位後,如果我們需要實作自己的資料建立時間和更新時間的記錄,那麼我們就需要手動編寫程式碼來實現。以下是一個例子:
// 在模型中实现自定义时间戳字段 protected $dateFormat = 'U'; protected static function boot() { parent::boot(); static::creating(function ($model) { $model->create_time = $model->freshTimestamp(); }); static::updating(function ($model) { $model->update_time = $model->freshTimestamp(); }); }
這個範例中,我們在模型中定義了 create_time 和 update_time 兩個欄位來記錄資料的建立時間和更新時間。同時,我們透過定義 $dateFormat 屬性來修改預設的時間格式。在 boot 方法中,我們透過 creating 和 updating 事件來為 create_time 和 update_time 賦值。 freshTimestamp 方法可以取得最新的時間戳記。
總結一下,取消 created_at 和 updated_at 可以透過在模型中加入 $timestamps = false 或修改 UPDATED_AT 常數來實現。取消這些時間戳欄位會影響Laravel中一些內建的功能,例如排序和自動記錄時間等等。如果需要自己實現時間戳記的記錄,可以透過手動編寫程式碼來實現。
以上是laravel怎麼取消created_at的詳細內容。更多資訊請關注PHP中文網其他相關文章!