Laravelスコープの使い方


  1. スコープの作成 スコープは、Eloquentモデル内で定義されます。まず、新しいスコープクラスを作成しましょう。例えば、ActiveScopeという名前のスコープを作成する場合、以下のようにします。
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
class ActiveScope implements Scope
{
    public function apply(Builder $builder, Model $model)
    {
        $builder->where('active', true);
    }
}
  1. スコープの登録 作成したスコープをEloquentモデルに登録する必要があります。モデルクラスのbootメソッド内で、addGlobalScopeメソッドを使用してスコープを登録します。例えば、PostモデルにActiveScopeを登録する場合、以下のようにします。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope(new \App\Scopes\ActiveScope);
    }
}
  1. スコープの使用 スコープが登録されたモデルでは、スコープが自動的に適用されます。例えば、Postモデルからactiveカラムがtrueの投稿を取得する場合、以下のようにします。
$activePosts = Post::all();

このようにすると、activeカラムがtrueの投稿のみが取得されます。

以上がLaravelスコープの基本的な使い方です。スコープを活用することで、コードの再利用性を高め、データベースクエリの制御を簡単にすることができます。さまざまな条件に基づいてレコードを取得する必要がある場合は、スコープを使用して効率的なクエリを作成することをおすすめします。