🫲

モデルの処理アクセサ・Attribute

2023/08/26に公開

アクセサは、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