Maison >base de données >tutoriel mysql >Laravel Eloquent ORM dans les étendues de requête de partie Bangla)
Query Scopes de Laravel Eloquent permet de stocker des requêtes récursives dans des méthodes pour rendre le code réutilisable. Cela permet de garder le code clair et compréhensible, surtout lorsque le même type de requête est nécessaire encore et encore. Les étendues de requête définissent les requêtes courantes sous forme de méthodes, qui peuvent ensuite être utilisées dans tout le modèle.
Global Scopes sont toujours attachées au modèle. Cette portée fonctionne automatiquement lorsque vous utilisez le modèle, vous n'avez pas besoin de l'écrire à chaque fois. Il est généralement utilisé pour vérifier l'état de connexion, les enregistrements actifs, etc.
1. Créer une classe de portée globale :
Pour créer un Global Scope dans Laravel, une classe qui implémente l'interface Scope
est utilisée.
<code class="language-php">use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class ActiveScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where('active', 1); // সক্রিয় ফিল্টার } }</code>
2. Attacher une portée globale au modèle :
Ceci devrait être ajouté à la méthode booted()
de votre modèle.
<code class="language-php">use App\Models\Post; use App\Scopes\ActiveScope; class Post extends Model { protected static function booted() { static::addGlobalScope(new ActiveScope); } }</code>
Maintenant, utiliser Post::all()
appliquera automatiquement le filtre active = 1
.
3. Omettre temporairement la portée globale :
<code class="language-php">use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class ActiveScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where('active', 1); // সক্রিয় ফিল্টার } }</code>
Cela supprimera temporairement la portée globale et renverra toutes les publications, à l'exception du filtre active
.
Local Scopes agit comme une portée de requête spécifique à l'intérieur du modèle et ne s'applique que lorsque vous l'appelez explicitement. Il n'est pas automatiquement appliqué lors de chaque requête comme la portée globale.
Créez une portée locale en ajoutant une méthode publique au modèle, dont le premier argument Builder
est input.
<code class="language-php">use App\Models\Post; use App\Scopes\ActiveScope; class Post extends Model { protected static function booted() { static::addGlobalScope(new ActiveScope); } }</code>
<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>
Les paramètres peuvent être transmis à la portée locale.
<code class="language-php">use App\Models\Post; class Post extends Model { // লোকাল স্কোপ public function scopeActive($query) { return $query->where('active', 1); } public function scopeDraft($query) { return $query->where('status', 'draft'); } }</code>
Scope peut désormais être utilisé avec le paramètre status
:
<code class="language-php">// সক্রিয় পোস্ট পেতে: $posts = Post::active()->get(); // ড্রাফট পোস্ট পেতে: $draftPosts = Post::draft()->get(); // চেইন করে ব্যবহার: $activeDraftPosts = Post::active()->draft()->get();</code>
'publié' est le paramètre.
Dynamic Scope est un type de portée locale, où le nom de la portée peut être appelé dynamiquement. Laravel permet l'utilisation de scopeName()
noms de types.
<code class="language-php">class Post extends Model { // লোকাল স্কোপ public function scopeStatus($query, $status) { return $query->where('status', $status); } }</code>
le scope peut désormais être appelé dynamiquement :
<code class="language-php">$posts = Post::status('published')->get();</code>
Cela fonctionne exactement comme la méthode scopePublished()
.
Plusieurs étendues peuvent être chaînées. Par exemple, les scopes status
et active
peuvent être utilisés ensemble :
<code class="language-php">use Illuminate\Database\Eloquent\Scope; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder; class ActiveScope implements Scope { public function apply(Builder $builder, Model $model) { $builder->where('active', 1); // সক্রিয় ফিল্টার } }</code>
Cela s'appliquera à la fois à active
et à status('published')
.
Les Portées locales d'Eloquent peuvent être chaînées, ce qui signifie que plusieurs portées peuvent être utilisées simultanément.
<code class="language-php">use App\Models\Post; use App\Scopes\ActiveScope; class Post extends Model { protected static function booted() { static::addGlobalScope(new ActiveScope); } }</code>
Il y a trois scopes et un orderBy
enchaîné.
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!