【Laravel】created_at, updated_atの自動更新を無効にしたりカラム名を変えたり

えびさん

Laravelではデフォルトではcreated_atカラムとupdated_atカラムが登録・更新時に自動更新される
それらをカスタマイズするときのメモ

カラム名を変更したい場合

モデル内にCREATED_AT, UPDATED_AT定数を指定することで、
自動更新するカラムをカスタマイズすることができる

例えば・・
original_created_atcreated_atとして、
original_updated_atupdated_atとして扱いたい場合

  • マイグレーション
$table->timestampTz('original_created_at')->nullable();
$table->timestampTz('original_updated_at')->nullable();
  • Models/Post.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    const CREATED_AT = 'original_created_at';
    const UPDATED_AT = 'original_updated_at';
}

これで、レコード登録時にはoriginal_created_atoriginal_updated_atに現在時刻が、
レコード更新時にはoriginal_updated_atに現在時刻が挿入される

自動更新を無効にしたい場合

CREATED_AT, UPDATED_AT定数にNULLを指定すればOK

  • Models/Post.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    const CREATED_AT = NULL;
    const UPDATED_AT = NULL;
}

created_at, updated_at両方とも無効にしたい場合は下記の記法でもOK

  • Models/Post.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public $timestamps = false;
}