はじめに
Laravelのアクセサを使うことで、モデルのプロパティ(テーブルのカラム)を、オリジナルの値から別の値に変換して取得することが可能となります。
本記事では、このアクセサの利用例を解説します。
目次
環境
- Laravel 5.5.45
事例
例えば、ブログに付けられたコメントの公開が、ブログ管理者による承認制であるブログシステムがあったとして、各コメントが承認済であるかどうかが、comments
テーブルのapproved_at
(承認日時)カラムの値の有無で判断できるとします。
approved_at(承認日時) | 承認状況 |
---|---|
null | 未承認 |
値あり | 承認済 |
もし、ビュー(Blade)側で、承認済の場合にのみ特定のコンテンツを表示するような制御を行うとすれば、一例として以下のようなロジックが考えられます。
@if (!is_null($comment->approved_at)) <p> <!-- 承認済の場合にのみ表示するコンテンツ --> </p> @endif
ここで、より直感的に承認済かどうかを判断可能なis_approved
をアクセサを使って実装してみます。
アクセサの実装
モデルに、以下の通りgetIsApprovedAttribute
というメソッドを作成します。
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Comment extends Model { public function getIsApprovedAttribute(): bool { return $this->approved_at ? true : false; } }
このようにget〜Attribute
といった形式で名付けられたモデルのメソッドがアクセサになります。
そして、このアクセサを利用するには、get
とAttribute
を取り除いたスネークケースで記述します。
先ほどのビュー(Blade)で利用するのであれば、以下のようになります。
@if ($comment->is_approved) <p> <!-- 承認済の場合にのみ表示するコンテンツ --> </p> @endif
アクセサの利点
もちろん、アクセサではなく、以下のようなisApproved
メソッドを作ったとしても、同等の効果は得られると思いますが、
public function isApproved(): bool { return $this->approved_at ? true : false; }
->isApproved()
ではなく、
->is_approved
といったように、モデルのプロパティ(テーブルのカラム)と同じ感覚で呼び出せるのが、アクセサの良いところのひとつではないかと思います。
余談
なお、先ほど、
そして、このアクセサを利用するには、getとAttributeを取り除いたスネークケースで記述します。
と書きましたが、実はスネークケースとなるis_approved
だけではなく以下のいずれの記述でもアクセサとして利用できます。
isApproved
IsApproved
isapproved
ISAPPROVED
i_s_a_p_p_r_o_v_e_d
柔軟ですね・・・。