【Laravel】アクセサとミューテタについて調べてみた

プログラミング

こんにちは!そーたです!

今回は、プログラミングについての記事を書こうと思います!

Laravelのアクセサとミューテタという機能についてです!

・アクセサとミューテタってそもそもなんなの?

・アクセサとミューテタを聞いたことがあるけど、実際にどう使ったらいいかいまいちわかっていない、、、

こんな悩みをお持ちの方におすすめの記事となっています。

本記事の構成
  • アクセサ
    • アクセサとは?
    • 使い方
    • 具体例
  • ミューテタ
    • ミューテタとは?
    • 使い方
    • 具体例
  • まとめ

現在、webエンジニアとして働き始めたばかりでして、実務で得た学びをアウトプットしようと考えています。

第1回目は、Laravelのデータ加工機能であるアクセサとミューテタについてご紹介します!

この記事を読むことで、アクセサとミューテタがどういったもので、どう使うのかがわかるようになると思います。

3分で読めるので、アクセサとミューテタについて知りたい方は最後まで読んでみてください。

アクセサ

アクセサとは?

アクセサとは、データベースから取得したデータを任意の形にフォーマットするためのメソッドです。

アクセサを使うことによって、モデルですでに加工済みのデータをフロント側に返すことができます。

使い方

class User extends Model
{
    /**
     * ユーザーのファーストネームを取得
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

get***Attributeの***の箇所に、使用したいプロパティ名を指定します。

上記の例で言うと、「FirstName」が、プロパティ名として使用できるようになります。

使用する際は、「first_name」のスネークケースでの記述になります。

return以降に、実際に加工する処理を記載します。

具体例

例えば、idカラムとnameカラムのあるuserテーブルがあるとします。

idの値とnameの値を一緒にフロントに返したい場合は、

class User extends Model
{
  public function getIdAndNameAttribute()
  {
	return 'id : ' . $this->id . '/ name : ' . $this->name;
  }
}

と、Userモデルに定義します。

インスタンスから指定したプロパティ名を指定することで、

下記のように加工済みのデータを取得することができます。

$user->id_and_name
=> "id: 1 / name : ワイ"

ミューテタ

ミューテタとは?

データベースにデータを保存する際に、データを事前ににフォーマットするためのメソッドです。

アクセサと真逆のメソッドですね。

使い方

class User extends Model
{
    /**
     * ユーザーのファーストネームを設定
     *
     * @param  string  $value
     * @return void
     */
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = strtolower($value);
    }
}

set***Attributeの***の箇所に、使用したいプロパティ名を指定します。

return以降に、実際に加工する処理を記載します。

具体例

例えば、上記のコードを例にすると、

データベース保存前に、first_nameカラムの値をstrtolowerメソッドで全て小文字に加工し保存するようにしています。

public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = strtolower($value);
    }

インスタンスには、下記のような形で代入するだけでミューテタが機能してくれます。

user = App\User::find(1);

$user->first_name = 'Sally';

注意する点として、ミューテタはインスタンスに値を設定するときに実行されます。

保存される時に実行されるわけではないので、一応頭の片隅に置いておいた方がいいかもしれません。

まとめ

今回は、laravelのアクセサとミューテタについて簡単にご紹介させていただきました。

初学者で恐縮なのですが、アクセサの機能を知らなかった僕は、データベースのカラムにないプロパティがViewに記載されており、ハマっておりました(笑)

仕様にもよるかと思いますが、うまくアクセサ、ミューテタを用いて実装していきたいですね!

今回は、以上になります!

最後まで読んでいただきありがとうございましたmm

タイトルとURLをコピーしました