Laravel & Eloquent 模型設定 created_at 和 updated_at

tinyzhe發表於2020-07-02

###1、設定預設欄位
資料入庫時一般都需要建立時間和修改時間,不想每次都在業務中填寫,怎麼辦?建立一個BaseModel,BaseModel繼承Eloquent/Model,自定義create_at、update_at欄位,其他Model繼承BaseModel即可

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    const CREATED_AT = 'create_time';
    const UPDATED_AT = 'modify_time';

}

###2、不需要記錄修改時間怎麼設定
最近做日誌業務,只需要 created_at 欄位就可以了,資料庫不想新增 updated_at 欄位。下面是解決方法:

解決方法
檢視 Illuminate\Database\Eloquent\Model 後發現,有這樣一行程式碼 use Concerns\HasTimestamps ,接下找到 trait HasTimestamps 看到 如下程式碼:

    protected function updateTimestamps()
    {
        $time = $this->freshTimestamp();

        if (! is_null(static::UPDATED_AT) && ! $this->isDirty(static::UPDATED_AT)) {
            $this->setUpdatedAt($time);
        }

        if (! $this->exists && ! $this->isDirty(static::CREATED_AT)) {
            $this->setCreatedAt($time);
        }
    }

    /**
     * Set the value of the "updated at" attribute.
     *
     * @param  mixed  $value
     * @return $this
     */
    public function setUpdatedAt($value)
    {
        $this->{static::UPDATED_AT} = $value;

        return $this;
    }

原始碼邏輯很簡單,直接在對應的Model 中設定 const UPDATED_AT = null 就可以了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章