Maison > développement back-end > tutoriel php > Portée mondiale dans Laravel (StepWise).

Portée mondiale dans Laravel (StepWise).

Barbara Streisand
Libérer: 2024-09-24 06:20:32
original
675 Les gens l'ont consulté

Global Scope in Laravel (StepWise).

Les portées globales sont un concept essentiel dans Laravel, permettant la réutilisation des conditions éloquentes tout au long de votre application. En implémentant des portées globales, vous pouvez appliquer des conditions spécifiques aux requêtes sur tous les modèles, favorisant ainsi la réutilisation et la cohérence du code. En revanche, les portées locales sont limitées à un seul modèle. Dans ce didacticiel, nous nous concentrerons sur la création et l'utilisation de portées globales dans Laravel.

  1. Dans cette étape, nous allons créer une classe globale à l'intérieur d'un application/Scopes/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)
    {
        // Define your global condition here
        $builder->where('is_active', '=', '1');

        //or we can write
        $builder->whereIsActive('1');

    }
}
Copier après la connexion
  1. Définissez maintenant ActiveScope dans le modèle utilisateur. Nous devrions remplacer la méthode de démarrage d'un modèle donné et utiliser la méthode addGlobalScope :
<?php

namespace App;

use App\Scopes\AgeScope;
use Illuminate\Database\Eloquent\Model;
use App\Scopes\ActiveScope;

class User extends Model
{
    /**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    {
        parent::boot();

        static::addGlobalScope(new ActiveScope);
    }
}
Copier après la connexion

Après avoir ajouté ActiveScope dans le modèle, User::all() générera le SQL suivant.

select * from `users` where `is_active` = '1'
Copier après la connexion

Il peut y avoir des scénarios dans lesquels vous souhaitez récupérer toutes les données sans appliquer la portée globale. Dans Laravel, vous pouvez contourner une portée globale et récupérer toutes les données en utilisant la méthode sansGlobalScope.

User::withoutGlobalScope(ActiveScope::class)->get();
Copier après la connexion

Si vous souhaitez supprimer plusieurs ou la totalité des étendues globales appliquées à un modèle, vous pouvez utiliser la méthode withoutGlobalScopes dans Laravel. Cette méthode vous permet de contourner toutes les étendues globales ou de spécifier celles que vous souhaitez supprimer. Voici un exemple :

// Remove all of the global scopes...
User::withoutGlobalScopes()->get();
Copier après la connexion
// Remove some of the global scopes...
User::withoutGlobalScopes([
    ActiveScope::class, AgeScope::class
])->get();
Copier après la connexion

Et si vous aimez le contenu et souhaitez soutenir d'autres articles géniaux, pensez à m'offrir un café ! ☕️ ? Votre soutien compte pour moi et contribue à maintenir le flux de connaissances. Vous pouvez le faire ici : ? Offre-moi un café

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:dev.to
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal