1. yukachin0414

    Posted

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