0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】get〜Attributeメソッドのアクセサを理解する

Posted at

はじめに

view側で見たことない属性へアクセスしているなあと思って色々調べていたら、Laravelのアクセサという機能を使っている事が判明。
その時に調べた内容・理解したことを記事にしています。

アクセサとは

公式より

アクセサを定義するには、アクセスしたいカラム名が「studlyケース(Upper Camel Case)」でFooの場合、getFooAttributeメソッドをモデルに作成します。以下の例では、first_name属性のアクセサを定義しています。first_name属性の値にアクセスが起きると、Eloquentは自動的にこのアクセサを呼び出します。

要するに、データベースから取得した値を加工したいときに使うもの。

アクセサの使い方

サンプルデータ

テーブル名: items
商品テーブルに数量、単価のカラムを用意

id quantity unitprice
1 2 1000
2 1 3

購入商品の合計金額が表示されるように実装を書いていきます。

Modelの準備

まずは、Modelでアクセサ(get〜Attribute)を定義します。

app/Models/Item.php
public function getTotalItemPriceAttribute()
    {
        return $this->unitprice * $this->quantity;
    }

アクセサ定義で気をつけること

  • キャメルケースで定義する(今回だとTotalItemPriceの部分)
  • 予期せぬ挙動を回避するため、DBのカラム名を使用しない

Controllerの準備

次はControllerでItemデータを取得してviewに値を渡します。

app/Controllers/ItemController.php
public function index()
    {
        $items = Items::get();
        return view('index', compact('items'));
    }

Viewの準備

最後に定義したアクセサを呼び出します。

resources/views/index.blade.php
@foreach ( $items as $item )
    {{ $item->total_item_price }}
@endforach

アクセサの呼び出しは、Modelファイルで定義したアクセサ名(getTotalItemPriceAttribute)からgetAttributeを除いたメソッドのスネークケース(total_item_price)で呼び出せます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?