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