laravel
laravel5

LaravelのEloquent modelにカスタムフィールド(カスタムアトリビュート)

やりたいこと

下のようなusersテーブルがあったとして

id sei mei
1 塩鯖 太郎

Modelを使うと

$user = User::first();
echo $user->sei; #=> "塩鯖"
echo $user->mei; #=> "太郎"

のようにできるのだが、

$user = User::first();
echo $user->name; #=> "塩鯖 太郎";

のようにテーブルには存在しないが、 seimei をつなげた
name という仮想的な(テーブルには存在しない)フィールドで扱えるようにしたい。

方法

Userモデルを以下のようにする

User.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $appends = ['name'];

    public function getNameAttribute()
    {
        return $this->sei . " " . $this->mei;
    }
}

$appends に仮想的なフィールドを登録します。
返す値は getXxxxAttribute() に定義すればOKです。
(Xxxxは追加するフィールド名)

ちなみにJsonにした際も

{
    [
        "sei": "塩鯖",
        "mei": "太郎",
        "name": "塩鯖 太郎"
    ]
}

 のようになると思います。

わーいヽ(゚Д゚*)ノ