schedule2019-05-23

Modelのupdate_atとcreate_atをカラムに合わせる | Laravel5.8

既設のDBのテーブルを利用した場合、作成更新日時を記録するカラムとLaravelの標準なカラムと合わないことがあります。 LaravelのModeleに設定を加えupdate_atとcreate_atと異なるカラム名にも対応させます

Model

MpdelではIlluminate\Database\Eloquent\Modelを継承している。 そこで、CREATED_ATUPDATED_ATをオーバーライドすることで実現します。

createdupdatedに対応させてみます。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // テーブル名
    protected $table = 't_user';

    // プライマリーキー
    protected $primaryKey = 'user_id';

    // カラム名をオーバーライド
    const CREATED_AT = 'created';
    const UPDATED_AT = 'updated';

    // 日付フォーマット
    protected $dateFormat = 'Y-m-d H:i:s.u'; 

    // 属性の保護
    protected $guarded = ['user_id', 'created', 'updated'];
}

これで、作成更新日時がそれぞれ割り当てられました。 他のカラム名でも同様に変更できます。

$dateFormat

関連する設定として$dateFormat`に日付のフォーマットを指定しています。

$guarded

createメソッドで自動入力されるidと作成更新日時を操作しないよう保護することができます。 カラムに代入できないようにブラックリストとしての役割です。 (user_idは自動インクリメントする前提)

反対に、$fillable`はホワイトリストとして働きます。 どちらか片方しか使用できません。

参考