💭

LaravelのModelのfind()を辿ってみた

2024/03/01に公開

モデルクラスのfind()ってどこで定義されてるの?

  • 調査しててfindメソッドを調べたかったので追ってみました
  • 基底クラスのModelクラスでもfind()って定義されてないんだよな〜〜〜どこにあるの?

__call()によって呼ばれているらしい

  • __callメソッドって?
    • __call()はマジックメソッドの一つで、実行させようとしたインスタンスのメソッドが存在しない時に呼ばれる。のやつ
    • いつもこれに惑わされる!メソッド迷子になる

Builderのfind()が呼ばれているらしい

  • Modelクラスの__call()内を読み解く
    • __call()内でforwardCallTo()をreturnしてる
    • forwardCallTo()内で第1引数のメソッド呼び出ししてる
    • forwardCallTo()に渡してるのは$this->newQuery()
    • $this->newQuery()の戻り値はDatabase\Eloquen\Builder
    • Builderにfind()ある〜〜〜!!

感想

callやめて!

参照

https://zenn.dev/aki_artisan/scraps/e960d9c55b4602

Discussion