Laravel のクエリ スコープは、アプリケーション全体で再利用するためにモデル内で一般的に使用されるクエリ メソッドを定義できるようにする非常に重要な機能です。これらのクエリ スコープは、グローバル (モデル全体に適用) またはローカル (モデルのメソッドのみに適用) にすることができます。
この記事では、Laravelにおけるクエリスコープの定義や使い方、注意点などを紹介します。
クエリ スコープは、Eloquent クエリ ビルダー インスタンスである $query パラメーターを受け取る匿名関数です。この匿名関数では、where 句や order by 句の追加など、インスタンスに対していくつかのクエリ操作を実行できます。
次は、基本的なクエリ スコープ定義の例です:
public function scopePublished($query) { return $query->where('status', '=', 'published'); }
上の例では、published という名前のクエリ スコープを定義します。これにより、where 句をクエリするときに、Published をフィルタリングするクエリ スコープが自動的に追加されます。モデル。
クエリ スコープの使用は非常に簡単で、モデルの対応するメソッドを呼び出すだけです。たとえば、上記の例で公開されたクエリ スコープを使用する場合、次のコードを呼び出すだけで済みます。
$posts = Post::published()->get();
上記のコードは、公開されたすべての Post インスタンスのコレクションを返します。
パラメータをクエリ スコープに渡す必要がある場合は、このメソッドにパラメータを追加するだけです。例:
public function scopeCategory($query, $categoryId) { return $query->where('category_id', '=', $categoryId); }
このクエリ スコープを使用して、特定のカテゴリのブログ投稿をフィルタリングできます。
$posts = Post::category(1)->get();
上記のコードは、カテゴリ ID 1 のすべてのブログ投稿を返します。
注: クエリ スコープは連鎖できるため、複数のクエリ スコープを同時に使用して、より正確な結果を取得できます。
モデル全体で同じクエリ スコープを使用する場合は、グローバル クエリ スコープを定義できます。これを行うには、モデル内でブート メソッドを呼び出し、static::addGlobalScope メソッドを使用してグローバル クエリ スコープを定義するだけです。
次に、基本的なグローバル クエリ スコープの例を示します。
protected static function boot() { parent::boot(); static::addGlobalScope('active', function (Builder $builder) { $builder->where('active', '=', 1); }); }
上の例では、active という名前のグローバル クエリ スコープを定義し、それを 1 レコードに等しいアクティブ フィールドに制限します。
これで、任意のメソッドでモデルをクエリすると、クエリ スコープが自動的に有効になります。
特定のモデルのクエリ スコープを削除する必要がある場合があります。 Laravel は、これを実現するために、removeGlobalScope メソッドを提供します。
たとえば、active という名前のグローバル クエリ スコープがあると仮定すると、次のメソッドを使用してそれを削除できます。
$users = User::withoutGlobalScope('active')->get();
上記のコードは、アクティブなクエリ スコープによって制限されていないすべてのクエリを返します。スコープユーザー。
注: すべてのグローバル クエリ スコープを削除する場合は、withoutGlobalScopes メソッドを使用できます。
$users = User::withoutGlobalScopes()->get();
上記のコードは、グローバル クエリ スコープによって制限されていないすべてのユーザーを返します。
概要
クエリスコープは、Laravel の非常に強力な機能です。クエリ スコープを使用すると、アプリケーション全体で一般的なクエリ操作を簡単に再利用でき、コードをより明確に整理できます。クエリ スコープの正しい使用法を学ぶと、生産性が向上するだけでなく、より堅牢なアプリケーションを構築するのにも役立ちます。
以上がlaravelクエリスコープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。