Maison >base de données >tutoriel mysql >Laravel Eloquent ORM dans les étendues de requête de partie Bangla)

Laravel Eloquent ORM dans les étendues de requête de partie Bangla)

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-16 20:03:11870parcourir

Laravel Eloquent ORM in Bangla Part-Query Scopes)

La fonctionnalité

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.

1. Portées mondiales

Explication :

Les

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.

Créer le périmètre global :

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.

2. Portées locales

Explication :

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éer un périmètre local :

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>

Utilisation de la portée locale :

<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>

Ajout d'un paramètre à la portée locale :

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.

3. Portées dynamiques

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

4. Portées multiples

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

5. Portée chaînable

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!

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