ひげぶろぐ

開発とか組織とかの話

LaravelのEloquent Modelのマジックメソッドが辛い

前置き

Laravelで中規模程度のサービスを運営してるんですが、スキーマ変更のタイミングでマジックメソッド辛い問題にぶち当たりました。
同じ気持ちの人を見つけて安心したかったけど、これくらいしか見つからなかったので自分で書き残しておこうと思いました。

www.freecodecamp.org

 

本題

LaravelのEloquent Model は、DBテーブルのカラム名でプロパティアクセス出来るように作られています。

こんな具合です。 

$createdDate = new Carbon($item->created_at);

プロパティ名がスネークケースになっていて既に気持ち悪さはありますが、便利といえば便利な機能なんだと思います。

 

ただこれ、多用するとかなりきつい事になります。
カニズム的には未定義のプロパティに対してマジックメソッド(__get())で半ば無理やりアクセスしているので、

  • IDEの補完が効かない
  • スキーマが変わったりした時には地道に使用箇所を検索して直していくしかない

というとても辛い未来が待ち受けています。

ご利用は計画的に。と言いたいですが、多分この問題に気づいたときにはあらゆる所でこの呼び出しが使われちゃってるんですよね。

 

Laravelはこういう暗黙的な実装が多い気がします。
PHPという言語のゆるふわさも相まって、コードリーディングやリファクタリングの難易度の高さはかなり高くなってしまう印象です。

皆どうしてるんだろう。
プロパティちゃんと定義しているのかな。
良いノウハウがあれば是非ご共有いただきたいところです。