Laravelめも

データベースでstatusフィールドを0:無効、1:有効のように数値で持っている場合、Bladeテンプレート側でどうやって文字列表示させるのが効率が良いのか考えました。

configに書く

config以下にファイルを作成し、設定する方法があります。

config/const.php

<?php

return [
    'statuses' => [
        0 => '無効',
        1 => '有効',
    ],
];

Bladeテンプレート側

{{ config('const.statuses')[$user->status] }}

コントローラ側からBlabeに渡してやる方法もありです。

return view('home', ['status' => config('const.statuses')[$user->status]]);

configにまとめて設定できるのは良さげですが、なんだかスッキリしません。

Eloquentのアクセサを使う

Eloquent(エロクエント)とはデータベースとモデルを紐付ける機能です。

accessors(アクセサ)を利用すれば値の取得時に自動的に呼び出されます。
モデルに書けて自動的に変換されるので、こちらの方が良さげです。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

static $statuses = [
    0 => '無効',
    1 => '有効',
];

class User extends Model
{
    /**
     * ユーザーの状態を取得
     *
     * @param integer $value
     * @return string
     */
    public function getStatusAttribute($value)
    {
        return self::$statuses($value);
    }
}

Bladeテンプレート側では何も考えずにechoするだけです。

{{ $user->status }}

逆にsetしたい場合はmutators(ミューテタ)を使用します。

https://readouble.com/laravel/5.5/ja/eloquent-mutators.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:23