LaravelのEloquent Modelのマジックメソッドが辛い
前置き
Laravelで中規模程度のサービスを運営してるんですが、スキーマ変更のタイミングでマジックメソッド辛い問題にぶち当たりました。
同じ気持ちの人を見つけて安心したかったけど、これくらいしか見つからなかったので自分で書き残しておこうと思いました。
本題
LaravelのEloquent Model は、DBテーブルのカラム名でプロパティアクセス出来るように作られています。
こんな具合です。
$createdDate = new Carbon($item->created_at);
プロパティ名がスネークケースになっていて既に気持ち悪さはありますが、便利といえば便利な機能なんだと思います。
ただこれ、多用するとかなりきつい事になります。
メカニズム的には未定義のプロパティに対してマジックメソッド(__get())で半ば無理やりアクセスしているので、
というとても辛い未来が待ち受けています。
ご利用は計画的に。と言いたいですが、多分この問題に気づいたときにはあらゆる所でこの呼び出しが使われちゃってるんですよね。
Laravelはこういう暗黙的な実装が多い気がします。
PHPという言語のゆるふわさも相まって、コードリーディングやリファクタリングの難易度の高さはかなり高くなってしまう印象です。
皆どうしてるんだろう。
プロパティちゃんと定義しているのかな。
良いノウハウがあれば是非ご共有いただきたいところです。