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.
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'); }
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.
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();
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); }
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();
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.
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); }); }
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.
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();
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();
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!