Laravel 5.2 Global Scope を設定する方法


Rails にある default_scope は Laravel 5.2 の Global Scope にあたります。

方法は大きく分けて2つあります。

モデルクラスを変更する方法

モデル内に次のように書きます。

addGlobalScope にクロージャを渡して、 クエリビルダを使うときの処理を加えます。 (Item::where などでレコードを検索するときもクエリビルダを生成しています。)

解除する方法

どうしても Global Scope を外したい場所が出てきた時は次のようにするとグローバルスコープを外したクエリを作成できます。 グローバルスコープの是非も再検討してくださいね。

スコープクラスを使う方法

Scope クラス を作ります。 そしてデフォルトにしたいスコープをモデルクラスで設定します。 そこそこ手間がかかるので、 ものすごくたくさんあるクラスのうち極めて限られたクラスでしか使用しないのなら、上の方法が手軽で向いていると思います。

Scope クラス を作る

Scope クラス を作ります。 Scope クラスは app/Scopes ディレクトリ を作成して配置します。

上のコードを見るとわかるように、 Scope クラス は Scope インターフェース を実装しています。 Scope インターフェース では apply メソッド が定義されています。

Scope をモデルに設定する

作成したスコープクラスを使ってモデルクラスで Global Scope を設定します。

解除する方法

どうしても Global Scope を外したい場所が出てきた時は次のようにするとグローバルスコープを外したクエリを作成できます。 グローバルスコープの是非も再検討してくださいね。