BLOG

ブログ

2023/10/11 プログラミング

Laravel9の新しいアクセサ/ミューテタ

この記事を書いた人 K.M

こんにちは!
だいぶ今更ではありますが、今回はLaravel9以降のアクセサ/ミューテタについて書いていきます。
そもそもアクセサ/ミューテタとは?という方は、Laravel9以前のものについてもブログに書いておりますのでこちらを先にご覧ください。

公式ドキュメント

Eloquent: Mutators & Casting

Laravel9以前のアクセサ/ミューテタ

// アクセサ
public function getFirstNameAttribute($value)
{
	return ucfirst($value);
}

// ミューテタ
public function setFirstNameAttribute($value)
{
	$this->attributes['first_name'] = strtolower($value);
}

アクセサであればget〇〇Attribute、ミューテタはset〇〇Attributeという名前のメソッドを用意して使用していました。
上記の例ではアクセサは頭文字を大文字に、ミューテタでは頭文字を小文字に変換しています。

新しいアクセサ/ミューテタ

use Illuminate\Database\Eloquent\Casts\Attribute; // ←忘れないように!

protected function firstName(): Attribute
{
  return Attribute::make(
      // アクセサ
      get: fn ($value) => ucfirst($value),
      // ミューテタ
      set: fn ($value) => strtolower($value),
  );
}

新しくなったアクセサ/ミューテタでは、get〇〇Attributeのような名前にする必要はありません。
また、アクセサ/ミューテタを単一のメソッドに定義することができるため、コードもシンプルになっていますね。
定義の書き方は変わっていますが、使い方は特に変わっておりませんので、以前のように使用できます。

注意点として、新しいアクセサ/ミューテタのメソッドでは、戻り値のタイプヒントをIlluminate\Database\Eloquent\Casts\Attributeで宣言しなければなりません。
忘れてしまうと動きませんので注意してください。

終わりに

以前アクセサ/ミューテタについてのブログを書いたこともあり、今更ではありますがLaravel9からのアクセサ/ミューテタについても書かせていただきました。
単一メソッドになりコードもすっきりしていいなと感じました。
またLaravel9からアクセサ/ミューテタでキャッシュが使えるようになったので、機会があればそちらについても書いていきたいと思います。



株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ