Laravelモデルアクセサを使う方法2種類

新しい会社に入ったものの、Laravelなんぞ触ったことがないのでひたすら勉強の毎日である。

例えば、customerテーブルのstatusというカラムに登録されている0,1などの数字に応じてCSSクラスを出したかったのだが、
最初は次のように書いていた。

config/const.php

<?php
return [
    'status_class' => [
        0 => 'fa-ban',
        1 => 'fa-check',
        2 => 'fa-circle-exclamation',
    ],
];

resources/views/index.blade.php

<i class="fa-solid {{ config('const.status_class.' . $records->status) }}"></i>

しかし、こういうのはモデルアクセサを使って一箇所で定義したほうがいいと教えてもらった。

モデルアクセサを使う

モデルアクセサは次のように書く。

app/Models/Customer.php

...省略...
class Customer extends Model
{
    ...省略...
    public function getStatusClassAttribute()
    {
        $ret = 'fa-ban'
        switch ($this->status) {
            case 1:
                $ret = 'fa-check';
                break;
            case 2:
                $ret = 'fa-circle-exclamation';
                break;
        }
        return $ret;
    }
}

resources/views/index.blade.php

<i class="fa-solid {{ $records->status_class }}"></i>

この場合status_classというカラム名でCSSクラスを取得できる。
モデル側はget作成したいカラム名のキャメルケースAttribute()で定義する。

余談

ちなみにこんな書き方もできるらしい。

...省略...
class Customer extends Model
{
    ...省略...
    public function StatusClass(): Attribute {
        ...省略...    }
}

こっちの方がどこまでがカラム名か分かり易いという場合もあるかも。

参考

関連記事

コメント

この記事へのコメントはありません。

TOP