やりたいこと
下のようなusers
テーブルがあったとして
id | sei | mei |
---|---|---|
1 | 塩鯖 | 太郎 |
Modelを使うと
$user = User::first();
echo $user->sei; #=> "塩鯖"
echo $user->mei; #=> "太郎"
のようにできるのだが、
$user = User::first();
echo $user->name; #=> "塩鯖 太郎";
のようにテーブルには存在しないが、 sei
と mei
をつなげた
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": "塩鯖 太郎"
]
}
のようになると思います。
わーいヽ(゚Д゚*)ノ