Laravelのモデルを共通化する(Scope)

Laravelロゴ

Queryの共通化

例えばこんなQueryがあったとして

$users = \App\User::where('age', '>=', 20)
->whereDate('created_at', today())
->get();

modelで

public function scopeSearch($query,$age) {
  return $query->where('age', '>=', $age)
    ->whereDate('created_at', today());
}

などとしておけば

$user = User::scopeSearch($age)->get();

という感じで使える。
ただし、LaravelでModelのソートをする場合、Collectionでおこうことが多いですが、これはQueryビルダなどの領域なのでget()やall()をした後は呼べません。

タイトルとURLをコピーしました