人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravelのモデル(Eloquent)の結果セット(Collection)に任意のカラムを追加する。またアクセサーで書式を変更する

● Laravelのモデルの結果セットに「任意のカラム」を追加する(自動)

モデルファイルに $appends プロパティをセットします

    // SELECTされるデータセットに次の独自カラムを追加する
    protected $appends = ['_editable_flag' , '_email_aisatsu' ];

● Laravelのモデルの結果セットに「任意のカラム」を追加する(手動)

Laravelのモデル(Eloquent)の結果セット(Collection)に手動で任意のカラムを追加するには map() を使用します。

// コレクションのすべてのデータにurl = http://your.url/here を追加
$collection->map(function ($v) {
    $v['url'] = 'http://your.url/here';
    return $v;
});
// コレクションそれぞれに count=xxx (任意の値) を追加
$collection->map(function ($v) {
    $v['count'] = <計算ロジック>;
    return $v;
});

● Laravelのモデルの結果セットに書式を変える「Accessor /Mutator」を追加する

少し書式を変えたいときは Accessor /Mutator を使いましょう

例1: is_starred=1 の時に ☆ を表示するアクセサ

モデルファイルに以下を記述

    /**
     * アクセサー : is_starred=1 の時に ☆ を表示する
     */
    public function getStarMarkAttribute()
    {
        if ($this->attributes['is_starred'] == 1){
            return '<div class="text-warning">★</div>';
        }
    }

呼び出し方

$model->star_mark

例2: 「dispatch_date」が存在する時にフォーマットして表示する。存在しない場合は未発送を返す アクセサ

    /**
     * アクセサー : 「->dispatch_date_ja」 で 値「dispatch_date」が存在する時にフォーマットして表示する。存在しない場合は未発送を返す。
     */
    public function getDispatchDateJaAttribute()
    {
        if ( $this->attributes['dispatch_date'] != null ){
            $c = new \Carbon\Carbon($this->attributes['dispatch_date']);
            return $c->format('m/d');
        } else {
            return '<span class="text-danger">未発送</span>';
        }
    }

呼び出し方

$model->dispatch_date_ja

関連エントリー

No.1384
03/19 10:29

edit

モデル
Eloquent
DB