Laravel モデル(Eloquent)から値を取得する便利機能!(アクセサとミューテタ)
・謎の値に遭遇した。
$user = App\User;
$user->full_name;
usersテーブルにfull_nameなんてカラムは無いし、Userモデルにfull_name()なんて関数は定義していない。
第3の定義方法を発見した!便利すぎる!
public function getFullNameAttribute()
{
return "{$this->first_name} {$this->last_name}";
}
①アクセサ
モデルに上記のように、
get(先頭大文字のキャメルケース)Attribute()
の形の関数を定義すると、()かっこ内をスネークケースにした文字でその関数の返り値をモデルの属性として取得できる。
getFullNameAttribute()を定義すると、$user->full_nameでフルネームを取得できる。
(姓last_nameと名first_nameはDBのカラムとして存在する状態)
逆に、DB保存するときの加工方法を指定できるミューテタというのもある。
setFirstNameAttribute()の形式で関数を宣言。
https://readouble.com/laravel/5.5/ja/eloquent-mutators.html
②DBのカラム
該当テーブルのカラムにあれば、取得可能。
③モデル内にリレーション定義していれば、取得可能。