| この記事の要点 |
|
結論: モデルに定数を書く
次のように、モデル内の 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アノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38