Laravel : アクセサとミューテタについて
- 2023年4月07日
- 技術情報
Laravelでは、アクセサーとミューテーターは、モデルの属性を取得したり値を設定したりする際に操作するためのメソッドです。
例えば、以下の属性を含んだ “Article” モデルがあるとします: “title”、”body”、”published_at “です。title “属性は常に前後の空白が取り除かれ、”published_at “属性は常にdatetimeオブジェクトとして保存されることを保証したいです。これを実現するには、各属性に対してアクセサーとミューテーターメソッドを作成します。
以下は、”title “属性のアクセサーメソッドとミューテーターメソッドを作成する例で説明しています:
class Article extends Model
{
// Accessor method for the "title" attribute
public function getTitleAttribute($value)
{
return trim($value);
}
// Mutator method for the "title" attribute
public function setTitleAttribute($value)
{
$this->attributes['title'] = trim($value);
}
}
以下は、”published_at “属性のアクセサーメソッドとミューテーターメソッドを作成する例で説明しています:
class Article extends Model
{
// Accessor method for the "published_at" attribute
public function getPublishedAtAttribute($value)
{
return Carbon::createFromFormat('Y-m-d H:i:s', $value);
}
// Mutator method for the "published_at" attribute
public function setPublishedAtAttribute($value)
{
$this->attributes['published_at'] = Carbon::parse($value)->format('Y-m-d H:i:s');
}
}
この例では、「getPublishedAtAttribute」メソッドで「published_at」属性を文字列からCarbon datetimeオブジェクトに変換することで、作業をしやすくします。setPublishedAtAttribute」メソッドも、モデルに保存する前に値をdatetimeオブジェクトに変換しています。
このようにアクセッサとミューテータを使用することで、モデルを使うたびに手動でこれらの操作を行わなくても、モデルの属性が常に希望する形式で保存・取得されることを保証することができます。
金曜担当 – Ami
asahi at 2023年04月07日 10:00:00