⚠️: 海外の記事をchatGPTで要約しただけのもの、主に自分用
新しい Laravel アプリを始めるなら Model::shouldBeStrict()
を使おう!
新しいアプリを作ろうと決めたら、まず何から手を付ける?僕の場合、Laravel のセットアップが完了したらすぐに App Service Provider の boot
メソッド内で Model::shouldBeStrict()
を呼び出すんだ。この一手間で、後々のトラブルを未然に防げるので、とっても助かる!
public function boot(): void
{
Model::shouldBeStrict();
}
この設定をオンにすると、内部で以下の3つの効果が働くよ:
- 不要な遅延ロードを防ぐ
- 属性が勝手に無視されるのを防ぐ
- 存在しない属性にアクセスするミスを防ぐ
1. 不要な遅延ロードを防ぐ
例えば、記事一覧と、それに関連するユーザー情報を表示するコードを考えてみよう。
$articles = \App\Models\Article::get();
foreach ($articles as $article) {
echo "<li>" . $article->user->name . "</li>\n";
}
普通だと、各記事ごとに user
リレーションが遅延ロードされるため、ループのたびにデータベースへクエリが発行されちゃう。
でも、Model::shouldBeStrict()
を有効にしておけば、もし遅延ロードが発生しようとすると即座にエラーで知らせてくれるので、無駄なクエリを実行する前に問題に気づけるんだ!
2. 属性が勝手に無視されるのを防ぐ
たとえば、モデルに設定されていない属性を更新しようとする場合…
$user->fill(["remember_token" => "bar"]);
通常は、何もエラーが出ずにその属性が無視されてしまうこともある。
でもこの設定を入れておけば、「この属性は fillable に設定されていませんよ!」というエラーがすぐに出るので、うっかりした設定ミスを早期にキャッチできるのが嬉しい!
3. 存在しない属性にアクセスするミスを防ぐ
例えば、User モデルに存在しないプロパティを表示しようとすると…
{{ $user->nonexistant }}
通常、Laravel は何も表示しないだけだけど、Strict モードがオンになっていると「存在しない属性にアクセスしようとしていますよ!」とエラーが返ってくれる。
これなら、タイプミスなどで意図しない属性アクセスをしてしまう前に、すぐに問題に気づけるね!
まとめ
Model::shouldBeStrict()
を有効にするだけで、些細なミスもすぐに教えてくれるので、後で大きなバグに悩まされるリスクがぐっと減る。
新しい Laravel アプリを始めるなら、まずこの設定を追加して、安心で快適な開発ライフをスタートしよう!
元記事