Laravel shouldBeStrictで開発効率を上げよう
公開: 2024-01-08
Model::shouldBeStrict()
を使うための簡易メモ。
Model::shouldBeStrict()
を設定すると何が嬉しいか?
以下の状況でエラーにしてくれます。
- Lazy Loading(N+1)が発生
- fillableにないカラムを挿入しようとした
- 存在しないカラムなどにアクセスしようとした
shouldBeStrict設定方法
AppServiceProvider
のboot
メソッド内にセットするだけです。
// app/Providers/AppServiceProvider
public function boot(): void
{
Model::shouldBeStrict();
}
引数にbool値を渡すことができるため、次のように本番環境以外でのみ適用することができます。
public function boot(): void
{
Model::shouldBeStrict(!app()->isProduction());
}
shouldBeStrictメソッドの中身
Model
クラスを見るとshouldBeStriect
が3つの処理をしていることがわかります。
// vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
/**
* Indicate that models should prevent lazy loading, silently discarding attributes, and accessing missing attributes.
*
* @param bool $shouldBeStrict
* @return void
*/
public static function shouldBeStrict(bool $shouldBeStrict = true)
{
static::preventLazyLoading($shouldBeStrict);
static::preventSilentlyDiscardingAttributes($shouldBeStrict);
static::preventAccessingMissingAttributes($shouldBeStrict);
}