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

Portée mondiale dans Laravel (StepWise).

Barbara Streisand
Barbara Streisandoriginal
2024-09-24 06:20:32644parcourir

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');

    }
}
  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);
    }
}

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

select * from `users` where `is_active` = '1'

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();

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();
// Remove some of the global scopes...
User::withoutGlobalScopes([
    ActiveScope::class, AgeScope::class
])->get();

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!

Déclaration:
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