やりたいこと
下のような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": "塩鯖 太郎"
]
}
のようになると思います。
わーいヽ(゚Д゚*)ノ