##はじめに
例えばviewで人の氏名を実装する時苗字+名前
といちいち実装するのは手間がかかりますよね。
今回のお題であるアクセサというLaravelの機能を用いれば、Modelに苗字+名前
と定義しておくだけで、viewで呼び出す時は氏名
で一気にフルネームを呼び出すことができます。
##アクセサを使って実装する
###そもそもアクセサとは
アクセサを定義するには、アクセスしたいカラム名が「studlyケース(Upper Camel Case)」でFooの場合、getFooAttributeメソッドをモデルに作成します。以下の例では、first_name属性のアクセサを定義しています。first_name属性の値にアクセスが起きると、Eloquentは自動的にこのアクセサを呼び出します。
Eloquent:ミューテタ 7.x Laravel
Laravelの公式ドキュメントには上記のように定義されています。
簡単にまとめるとModelにget〜Attribute
(今回の場合はgetFullNameAttribute)というメソッドを定義すると、それをuseしたControllerやviewでfull_name
(今回の場合は$this->full_name)属性の値で呼び出せます。
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* ユーザーのフルネームを取得
*
* @return string
*/
public function getFullNameAttribute()
{
return this->last_name . this->first_name;
}
}
<?php
{{ $this->full_name }}
##おわりに
いかがでしたでしょうか。
今回のようにModelに定義しておくことでフルネームを表示するに「山田花子」「山田 花子」「山田 花子」みたいに人によってスペース開けたり開けなかったり、半角スペースだったりすると思うので、まとめて定義しておくと保守性が上がるでしょう。