◀ 5.

Laravelのモデルにおけるタイムスタンプの生成

▶
この記事の要点
  • Laravel Eloquent モデルのタイムスタンプ自動更新
  • created_at / updated_at はデフォルトで自動更新される
  • 解除するには Model 内で public $timestamps = false; を宣言
  • カラム名を変えたいときは const CREATED_AT = 'created_dt'; を Model 内で定義

 

Eloquentのタイムスタンプの基本

EloquentのdateFormatによるDB保存と日付オブジェクトのformatによる画面表示は別で、PHPの日付書式はY・m・dを使う説明図

下のUserモデル例は旧Laravelのnamespace Appを使っています。現行アプリでは通常app/Models配下のApp\Modelsを使うため、既存モデルの配置・名前空間へ合わせてください。3つのUser例はそれぞれ別の設定例であり、同名クラスを1ファイルへ重ねて貼るものではありません。

Laravelのモデルではcreated_atとupdated_atのカラムは自動で更新されます。

それぞれ作成日時と更新日時が入ることになります。

モデルの自動更新の設定を解除したい場合は以下の実装をします。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * モデルのタイムスタンプを更新するかの指示
     *
     * @var bool
     */
    public
$timestamps = false;
}

 

DBに保存する日付の形式は$dateFormatで指定します。画面だけを年月日にしたい場合とは別です。PHPの日付書式ではYが年、mが月、dが日、H:i:sが時分秒で、YYYY/MM/DDではありません。DBカラムが受け入れる形式へ合わせてください。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * モデルの日付カラムの保存フォーマット
     *
     * @var string
     */
    protected
$dateFormat = 'Y-m-d H:i:s';
}

 

created_atとupdated_atの名称を変更したい場合は以下の様に実装します。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    const
CREATED_AT = 'creation_date';
    const
UPDATED_AT = 'last_update';
}

 

保存時の動きと対象カラム

タイムスタンプが有効なEloquentモデルでは、新規保存時に作成日時と更新日時を設定します。既存モデルの更新では更新日時を設定し、作成日時は変更しません。ただし、自分で日付属性を変更した場合などはその値が優先されます。属性を代入しただけではDBへ保存されません。

以下はLaravel 13で属性生成を確認した、カラム名を変更する独立した例です。app/Models/TimestampExample.phpに対応します。実際にsaveするには対応するテーブルとcreation_date / last_updateカラムが必要で、定数を変更してもDBカラムは作成・改名されません。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class TimestampExample extends Model
{
    public const CREATED_AT = 'creation_date';
    public const UPDATED_AT = 'last_update';
    protected $dateFormat = 'Y-m-d H:i:s';
}

画面の表示だけを変える

取得したモデルの日時を表示するときは、日付オブジェクトのformatを使います。次は上のモデルを取得済みの$recordに対する例です。nullなら「未設定」を表示します。

echo $record->creation_date?->format('Y/m/d') ?? '未設定';

保存形式Y-m-d H:i:sなら例は2026-10-07 12:34:56、表示用Y/m/dなら2026/10/07になります。旧記事のYYYY/MM/DDはPHPでは2026202620262026/OctOct/WedWedのような別の文字列になります(2026年10月7日の例)。JSON/APIの日時表現やタイムゾーンの変換は別の設定であり、$dateFormatだけで画面・APIすべての出力形式が変わると考えないでください。

更新を無効にする場合の注意

  • public $timestamps = falseは、モデルの自動管理を無効にする設定です。DBのDEFAULTやトリガーまで無効にはしません。
  • Laravel 13ではModel::withoutTimestampsのコールバック内だけ一時的に無効にできます。旧版へそのまま使えるとは限りません。
  • DB::tableによるクエリビルダーの更新はモデルのタイムスタンプ管理を通りません。Eloquentモデル経由の更新と区別します。
  • 保存できない場合はカラムの有無・型・名前と有効なモデル設定を確認します。表示だけを変える目的で本番の日時カラムを変更しないでください。

この記事の追加例は、DBへ接続せず、保存形式、作成/更新属性、カラム名、画面表示、無効化の範囲を確認しています。実テーブルへのsaveや本番DB変更は行っていません。

公式資料: Laravel 13 Eloquentのタイムスタンプ、PHPの日付書式(2026年10月確認)。

Post Share
子ページ

子ページはありません

同階層のページ
  1. モデルの作成
  2. $fillable $guarded $hiddenの説明
  3. テーブルの紐づけ
  4. 主キーの指定とインクリメント
  5. タイムスタンプ
  6. モデルでselect
  7. モデルでinsert
  8. モデルでupdate
  9. 現在値に加算する方法
  10. created_at/updated_atの別名指定