こんにちは!タクマです。
31歳未経験からエンジニア転職に成功し、
2021年3月より都内の受託開発企業にてサーバーサイドエンジニアとして働いており、
PHP/Laravel、Vue.jsを使用し開発をしています。
本日はLaravelのアクセサの使い方について解説します。
アクセサってなに?
アクセサ聞いたことあるけど使い方がわからない
という方はこの記事を読めばアクセサを理解し、使いこなせるようになりますので、是非最後まで読んでください!
アクセサとは?
アクセサとは、アクセス時にモデルのプロパティの値を変換する処理のことです。
実際に使い方を見てみましょう!
アクセサの書き方
例としてItemモデルのpriceプロパティ10000を表示用に¥10,000-に変換するdisplay_price
というアクセサを書く場合下記のようになります。
<?php
namespace App\Models;
class Item extends Model
{
use HasFactory;
/**
* 金額を表示用に整形して返却する
* 例:10000 → ¥10,000-
*
* @return string
*/
public function getDisplayPriceAttribute(): string
{
return '¥' . number_format($this->price) . '-';
}
}
このようにget〜Attribute
といった名前のモデルメソッドがアクセサになります。
これでdisplay_price
というアクセサの定義ができました。
アクセサの呼び出し方
定義したアクセサはget
とAttribute
を除いたアクセサ名をスネークケースで記述することで呼び出すことができます。
$item->display_price ; // ¥10,000-が呼び出される
このようにプロパティと同じ感覚でスネークケースで呼び出すことができるのはアクセサのメリットの一つです!
余談
余談ですが、先ほど
定義したアクセサはgetとAttributeを除いたアクセサ名をスネークケースで記述することで呼び出すことができます。
と書きましたが、実は
$item->displayPrice;
$item->DisplayPrice;
$item->displayprice;
と上記のように記述しても呼び出すことができます。
ですが、アクセサはスネークケースで呼び出すことが一般的ですので、スネークケースで呼び出しましょう!
また、アクセサではなく、モデルメソッドとして下記のように書いても同じ結果が得られます。
<?php
namespace App\Models;
class Item extends Model
{
use HasFactory;
/**
* 金額を表示用に整形して返却する
* 例:10000 → ¥10,000-
*
* @return string
*/
public function getDisplayPrice(): string
{
return '¥' . number_format($this->price) . '-';
}
}
$item->getDisplayPrice(); // ¥10,000-
ですが、呼び出す際にスネークケースでプロパティと同じ感覚で呼び出せるアクセサの方が個人的には好きです。
さいごに
いかがでしたでしょうか?
アクセサの使い方ついて理解できましたでしょうか?
ご質問やご指摘等ある方はコメントしていただければ返信させていただきます。
これからもLaravelエンジニアの方、Laravel学習中の初学者の方に役に立つ記事を更新していきますのでよろしくお願いします!
Twitterでも情報発信をしていますので、よかったらフォローをお願いします(^^)