#アクセサとは
データベースからデータを取得する際に走る処理のこと。
##公式ドキュメント
https://readouble.com/laravel/7.x/ja/eloquent-mutators.html
##何が便利か
IDだけDBに保存し、アクセサでconfig内においたファイルから、都道府県名を自動で出す。という処理ができる。
文字より数字のほうがサイズが小さいので、少ないデータ量でやり取りができる。
##書き方
- configディレクトリにファイルを作って、データをおく
- アクセサをモデル内に定義する
- コントローラにアクセサを書く
###DBに登録されているidから、都道府県名を取得するアクセサを作る場合。
configディレクトリにファイルを作って、データをおく。
連想配列に、idをキー、都道府県名を値として入れる。
config/pref.php
<?php
return array(
'1' => '北海道',
'2' => '青森県',
'3' => '岩手県',
'4' => '宮城県',
'5' => '秋田県',
'6' => '山形県',
'7' => '福島県',
'8' => '茨城県',
'9' => '栃木県',
'10' => '群馬県',
'11' => '埼玉県',
'12' => '千葉県',
'13' => '東京都',
'14' => '神奈川県',
'15' => '新潟県',
'16' => '富山県',
'17' => '石川県',
'18' => '福井県',
'19' => '山梨県',
'20' => '長野県',
'21' => '岐阜県',
'22' => '静岡県',
'23' => '愛知県',
'24' => '三重県',
'25' => '滋賀県',
'26' => '京都府',
'27' => '大阪府',
'28' => '兵庫県',
'29' => '奈良県',
'30' => '和歌山県',
'31' => '鳥取県',
'32' => '島根県',
'33' => '岡山県',
'34' => '広島県',
'35' => '山口県',
'36' => '徳島県',
'37' => '香川県',
'38' => '愛媛県',
'39' => '高知県',
'40' => '福岡県',
'41' => '佐賀県',
'42' => '長崎県',
'43' => '熊本県',
'44' => '大分県',
'45' => '宮崎県',
'46' => '鹿児島県',
'47' => '沖縄県'
);
アクセサをモデル内に定義する
getHogeAttribute()
Hogeの部分を任意の文字にする。
キャメルケースで書くので、最初は大文字にする。
モデルのファイルに以下を記述。
prefecturesテーブルを作ったなら、app/Prefecture.phpに書く。
User.php
public function getPrefNameAttribute()
{
return config('pref.' . $this->location);
}
今回はUsersテーブルにlocationカラムを作ってそこにidを保存することにした。
コントローラにアクセサを書く
public function index() {
$user = User::find(2);
dd($user->pref_name);
}
(本来なら、viewで表示できるようにするが、すぐに結果が見たかったのでddで表示させるようにした。)
取り出したレコードを$userに代入。
$user->pref_name;
と書くことで、自動でアクセサがidから都道府県名を取得し返してくれる。
アクセサを呼び出す記述は、アンダースコアなしで、$user->prefnameと書いてもOK。
(アンダースコア付けてたほうが、アクセサっぽくて見やすいかもしれない。。。)
結果
都道府県名が表示される
##まだわからないこと
- アクセサはLaravelだけの機能ではない?
- ミューテタっていうのもあるらしい。
調べれば調べるほど知らないことがでてくるぞ!
コツコツ調べよう。