💬

Laravel カスタムアクセサ について

2022/01/23に公開

PHP/Laravelの業務を始めて2ヶ月、初歩的なことで詰まったことを記載します。

コードの中で、
book->idea
と記載されており、ブラウザには文字が表示されているのに、
コード内でbookをログ出力しても、ideaの中身が何も表示されない!なんで?
となって格闘すること1時間、先輩から、「それはカスタムアクセサでは」と仰っていただき速攻で解決しました。

そもそも「->」について

PHPで度々登場するアロー関数はどういう時に使われるのか。
それは、

①クラスのプロパティ(メンバ変数)へのアクセス

②クラスのメソッドへのアクセス

になります。
今回、コントローラーで定義されている変数のみに着目しすぎてモデルクラスを見ておりませんでした。

カスタムアクセサとは

laravelは、get----Attribute の形でモデルにメソッド定義すると、->----みたいな感じのアクセサをつくれるとのこと。
Laravel 7.x Eloquent:ミューテタ

使用例

Book.php

   $memo = "面白い本";

   // $book->idea
   public function getIdeaAttribute() {
       return $this->memo;
   }

上記により、Bookクラスをインスタンス化したものをbook変数に代入し、
book->ideaと記述すると、
"面白い本"出力されるという流れ。

最後に

まだまだ未熟ですが、知らないことを日々少しずつ知識として蓄えていければと思っております。

Discussion