Laravelにスコープ(scope)という機能があります。
モデルを拡張する機能です。
使用用途は、特定のモデルで繰り返し発生しうる処理に対して、
モデル内でスコープを定義することで、スコープを呼び出すだけで済みます。
例えば、下記のようにPostモデルに対して、公開中の処理が下記の2つのwhere句を必要としましょう。毎回、公開中であるたびに、記述しているのはかなり面倒くさい。
Post::where(‘is_draft’, 0) ->where(‘isClosed’, 0)
こういう、いろんなところで書きそうな条件はスコープにしてしまえば、書き間違えや書き漏れがなくなります。
https://readouble.com/laravel/7.x/ja/eloquent.html#query-scopes
ModelのPost.php の中で
public function scopePublish($query)
{
return $query->where('is_draft', 0)
->where('isClosed', 0);
}
- eloquentクラスに
scopeXxxxxx
でメソッドつくるとローカルスコープを作れる - そこに条件を書いておく
そうすると、呼び出し元では、
// 変更前 $searchArticles = Post::where('is_draft', 0) ->where('isClosed', 0) ->where('lovesex' , $request->lovesex)// 変更後(スコープを利用) $searchArticles = Post::publish() ->where('lovesex' , $request->lovesex)
- eloquentクラスに書いた
scopeXxxxxx
メソッドのXxxxx
部分で呼び出し可能になる
// is_draft が0、かつ isClosed が0のデータ
RecomendArticle::where('is_draft', 0)
->where('isClosed', 0)
って読みづらかったものが
// 公開中のもの Post::publish();
と無駄な記述も減らすことが可能です。