はじめに
今回はLaravelのアクセサ、ミューテタについて調べたので、備忘録として残しておきます。
環境
- Laravel:8.83.4
1. アクセサ、ミューテタとは
アクセサとは、データベースから取得したデータをフォーマットするためのメソッドです。
アクセサを使うことで、加工したデータをフロント側に返すことができます。
ミューテタは、インスタンスに値を設定する際にデータをフォーマットするためのメソッドです。
2. アクセサを使ってみる
下記のコードでupdated_atカラム
を取得する時にgetUpdatedAtAttributeが実行されます。
下記は、DBにタイムスタンプ型で存在するupdated_atカラム
を「2022-08-03 20:00:00」のような書式で返したい場合のコードです。
引数の$value(updated_atのデータ)
を加工して返します。
public function getUpdatedAtAttribute($value)
{
return Carbon::parse($value)->toDateTimeString();
}
下記のようにDBからデータを取得するときに、getUpdatedAtAttributeが実行され、データを加工して返します。
$post = App\Post::find(1);
$updatedAt = $post->updated_at;
上記のように、アクセサはDBからのデータ取得時にデータを加工できます。
3. ミューテタを使ってみる
下記のコードの場合、contentカラム
の保存時に自動で setContentAttributeが実行されます。
public function setContentAttribute($value)
{
$this->attributes['content'] = strtolower($value);
}
このようにすると、 文字列で "Content"
という値をインスタンスに設定するときに、 "content"
と小文字に変換されてから保存されます。
$post = Post::find(1);
$post->content = 'Content';
$post->save();
上記のように、ミューテタはデータをDBに保存する際にデータを加工することができます。
以上で実装完了です。
4. 参考文献