🫲
モデルの処理アクセサ・Attribute
アクセサは、Eloquentの属性値にアクセスがあったときに値を変換してくれるので、$user->icon_url
のように属性にアクセスするだけで処理が行われる。
アクセサメソッドは、Attribute(属性)インスタンスを返す。
Model/User 画像アップロード処理
① protected $appends = ['icon_url']; // データを常に呼びだしたいとき$appendsを使う
② protected function iconUrl(): Attribute //アクセサ:Eloquentの属性値にアクセスがあったとき、値を変換するもの
{
return new Attribute(
get: function($value, $attributes) {
if ($attributes['icon_file_name']) { // iconが存在する場合、icon画像urlを返す (icon_file_nameは、DBのカラム名)
③ return asset('storage/images/' . $attributes['icon_file_name']);
}
$text = mb_substr($attributes['name'], 0 ,1); // 名前の1文字目を抜き出し
return "https://placehold.jp/150x150.png?text=$text"; // ダミー画像生成サービスを利用する
}
);
}
① protected $appends = ['icon_url'];
$appends・・・データを常に呼び出すことができる
② protected function iconUrl(): Attribute
$user->icon_file_name のように属性にアクセスするだけで、処理が行われる(Attributeインスタンスを返す)
③ return asset('storage/images/' . $attributes['icon_file_name'])
asset関数は、asset('パス')でpublicディレクトリのパスを返す
Discussion