1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel7】アクセサについて調べてみた。

Last updated at Posted at 2021-02-16

#アクセサとは
データベースからデータを取得する際に走る処理のこと。

##公式ドキュメント
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だけの機能ではない?
  • ミューテタっていうのもあるらしい。

調べれば調べるほど知らないことがでてくるぞ!
コツコツ調べよう。

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?