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
Libérer: 2025-01-16 20:03:11
original
867 Les gens l'ont consulté

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Utilisation de la portée locale :

<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

'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>
Copier après la connexion

le scope peut désormais être appelé dynamiquement :

<code class="language-php">$posts = Post::status('published')->get();</code>
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion
Copier après la connexion

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!

source:php.cn
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