| この記事の要点 |
|
結論: モデルに定数を書く
次のように、モデル内の CREATED_AT / UPDATED_AT 定数に、created_at / updated_at に相当するカラム名を指定することで、Laravel 側は指定したカラムを作成日時・更新日時として認識するようになります。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
}
これだけで、Flight::create() や $flight->save() のときに、creation_date と last_update に現在日時が自動で入るようになります。
なぜ別名指定が必要になるのか
Eloquent モデルは、既定でテーブルに created_at と updated_at という列があることを前提にしています。新規作成時には両方に、更新時には updated_at に、現在日時を自動で設定します。
しかし、既存のシステムのテーブルを Laravel から使う場合などは、列名が created_date や insert_datetime のように違うことがよくあります。この状態で何も設定しないと、Laravel は存在しない created_at 列に書き込もうとして、次のようなエラーになります。
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'updated_at' in 'field list'
テーブル定義を変えずに Laravel 側を既存の列名に合わせるのが、CREATED_AT / UPDATED_AT 定数の役割です。
パターン別の書き方
| テーブルの状態 | モデルの設定 |
|---|---|
| 列名が違う | const CREATED_AT = '列名'; const UPDATED_AT = '列名'; |
| 作成日時の列だけある | const UPDATED_AT = null; |
| 更新日時の列だけある | const CREATED_AT = null; |
| 日時の列がない・自動設定したくない | public $timestamps = false; |
| 日時を UNIX 時刻などで保存している | protected $dateFormat = 'U'; を併用 |
// 作成日時だけを持つログテーブルの例
class AccessLog extends Model
{
const CREATED_AT = 'logged_at';
const UPDATED_AT = null;
}
// タイムスタンプを一切使わないテーブル
class Prefecture extends Model
{
public $timestamps = false;
}
ソフトデリート(SoftDeletes トレイト)の削除日時列も、同じように const DELETED_AT = 'removed_at'; で変更できます。
マイグレーションで列を作る場合
マイグレーションの $table->timestamps() は、常に created_at と updated_at という名前で列を作ります。別名にしたい場合は、列を個別に定義します。
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamp('creation_date')->nullable();
$table->timestamp('last_update')->nullable();
});
特別な理由がない新規テーブルなら、Laravel の規約どおり created_at / updated_at にしておく方が、パッケージやチームの慣習と合わせやすくおすすめです。
別名にしても自動で追従するもの
- 日付キャスト: 指定した列は Carbon(日時オブジェクト)として取得され、
$flight->creation_date->format('Y-m-d')のように扱える latest()/oldest(): 列名を省略すると、モデルの CREATED_AT で指定した列で並べ替えるtouch(): UPDATED_AT で指定した列を現在日時に更新する- リレーションの
$touches: 親モデルの更新日時列にも、親側の定義に従って書き込まれる
コードの中で列名が必要なときは、文字列を直書きせず $model->getCreatedAtColumn() / $model->getUpdatedAtColumn() で取得すると、定数の変更に強くなります。
よくある落とし穴
- DB ファサードでは自動設定されない:
DB::table('flights')->insert([...])やFlight::insert([...])(複数行の一括 insert)はクエリビルダの機能なので、日時は自分で指定する必要がある - 中間テーブル(pivot):
belongsToManyのwithTimestamps()は、既定で created_at / updated_at を使う。別名の場合はwithTimestamps('creation_date', 'last_update')のように列名を渡す - 定数のスペルミス:
CREATE_ATのように綴りを間違えるとエラーにならず無視され、既定の created_at が使われる - 一時的に更新日時を変えたくない: そのときだけ
$model->timestamps = false;を設定してからsave()する
確認方法
php artisan tinkerで(new App\Models\Flight)->getCreatedAtColumn()を実行し、指定した列名が返るか確認するFlight::create(['name' => 'test'])でレコードを作り、指定した列に日時が入っているか確認する- 発行された SQL を確認したい場合は、
DB::enableQueryLog()でクエリログを取り、insert 文の列名を見る
関連
- Laravel マイグレーション完全ガイド — テーブル定義と運用
- Laravel マイグレーションでカラム追加・変更・削除|ALTER TABLE 構文
- Laravel Eloquent モデルのデフォルト値設定
- Laravel Query Builder の DELETE 完全ガイド(Eloquent / Soft Delete / 一括削除)
- Laravel の SQL の実行ログ出力方法
子ページはありません
- モデルの作成
- $fillable $guarded $hiddenの説明
- テーブルの紐づけ
- 主キーの指定とインクリメント
- タイムスタンプ
- モデルでselect
- モデルでinsert
- モデルでupdate
- 現在値に加算する方法
- created_at/updated_atの別名指定
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15