Maison > cadre php > Laravel > portée de la requête Laravel

portée de la requête Laravel

WBOY
Libérer: 2023-05-26 17:42:09
original
591 Les gens l'ont consulté

La portée des requêtes dans Laravel est une fonctionnalité très importante qui vous permet de définir certaines méthodes de requête couramment utilisées dans le modèle pour les réutiliser dans l'ensemble de l'application. Ces portées de requête peuvent être globales (s'appliquer à l'ensemble du modèle) ou locales (s'appliquer uniquement à une méthode du modèle).

Dans cet article, nous présenterons la définition, l'utilisation et certaines choses auxquelles il convient de prêter attention à la portée des requêtes dans Laravel.

  1. Définition de la portée de la requête

La portée de la requête est une fonction anonyme qui reçoit un paramètre $query, qui est une instance d'Eloquent query Builder. Dans cette fonction anonyme, vous pouvez effectuer certaines opérations de requête sur l'instance, telles que l'ajout de clauses Where, de clauses order by, etc.

Ce qui suit est un exemple de définition de portée de requête de base :

public function scopePublished($query)
{
    return $query->where('status', '=', 'published');
}
Copier après la connexion

Dans l'exemple ci-dessus, nous définissons une portée de requête nommée publiée, qui sera utilisée dans la requête. Ajouter automatiquement un clause Where pour filtrer les modèles publiés.

  1. Utiliser la portée de la requête

L'utilisation de la portée de la requête est très simple, il suffit d'appeler la méthode correspondante du modèle. Par exemple, si nous utilisons la portée de requête publiée dans l'exemple ci-dessus, il nous suffit d'appeler le code suivant :

$posts = Post::published()->get();
Copier après la connexion

Le code ci-dessus renverra une collection de toutes les instances Post publiées.

Si vous devez transmettre des paramètres dans la portée de la requête, ajoutez simplement des paramètres dans cette méthode. Par exemple :

public function scopeCategory($query, $categoryId)
{
    return $query->where('category_id', '=', $categoryId);
}
Copier après la connexion

Cette portée de requête peut être utilisée pour filtrer les articles de blog pour une catégorie spécifique.

$posts = Post::category(1)->get();
Copier après la connexion

Le code ci-dessus renverra tous les articles de blog avec l'ID de catégorie 1.

Remarque : les étendues de requête peuvent être chaînées, vous pouvez donc utiliser plusieurs étendues de requête en même temps pour obtenir des résultats plus précis.

  1. Définition globale de la portée de la requête

Si vous souhaitez utiliser la même portée de requête dans tout le modèle, vous pouvez définir un domaine de portée de requête globale . Pour ce faire, appelez simplement la méthode de démarrage dans votre modèle et définissez une portée de requête globale à l'aide de la méthode static :: addGlobalScope.

Ce qui suit est un exemple de portée de requête globale de base :

protected static function boot()
{
    parent::boot();

    static::addGlobalScope('active', function (Builder $builder) {
        $builder->where('active', '=', 1);
    });
}
Copier après la connexion

Dans l'exemple ci-dessus, nous définissons une portée de requête globale nommée active et la limitons pour les enregistrements dont le champ actif est égal à 1.

Désormais, lorsque vous interrogez le modèle dans n'importe quelle méthode, la portée de la requête prendra automatiquement effet.

  1. Supprimer la portée de la requête

Parfois, nous devrons peut-être supprimer la portée de la requête d'un modèle spécifique. Laravel fournit la méthode removeGlobalScope pour nous aider à y parvenir.

Par exemple, en supposant que nous ayons une portée de requête globale nommée active, nous pouvons utiliser la méthode suivante pour la supprimer :

$users = User::withoutGlobalScope('active')->get();
Copier après la connexion

Le code ci-dessus ne renverra aucun effet actif. Restrictions de domaine pour tous les utilisateurs.

Remarque : Si vous souhaitez supprimer toutes les étendues de requête globales, vous pouvez utiliser la méthode withoutGlobalScopes.

$users = User::withoutGlobalScopes()->get();
Copier après la connexion

Le code ci-dessus renverra tous les utilisateurs non limités par une portée de requête globale.

Summary

La portée des requêtes est une fonctionnalité extrêmement puissante dans Laravel. En utilisant des étendues de requête, vous pouvez facilement réutiliser les opérations de requête courantes dans votre application et organiser votre code plus clairement. Apprendre à utiliser correctement les étendues de requête peut non seulement améliorer votre productivité, mais également vous aider à créer des applications plus robustes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal