LoginSignup
1
1

More than 3 years have passed since last update.

Laravelのアクセサ

Posted at

はじめに

例えば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)属性の値で呼び出せます。

Model
namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザーのフルネームを取得
     *
     * @return string
     */
    public function getFullNameAttribute()
    {
        return this->last_name . this->first_name;
    }
}
view
<?php

    {{ $this->full_name }}

おわりに

いかがでしたでしょうか。
今回のようにModelに定義しておくことでフルネームを表示するに「山田花子」「山田 花子」「山田 花子」みたいに人によってスペース開けたり開けなかったり、半角スペースだったりすると思うので、まとめて定義しておくと保守性が上がるでしょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1