Heim >Datenbank >MySQL-Tutorial >Laravel Eloquent ORM in Bangla-Teilabfragebereichen)

Laravel Eloquent ORM in Bangla-Teilabfragebereichen)

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-16 20:03:11870Durchsuche

Laravel Eloquent ORM in Bangla Part-Query Scopes)

Die Query Scopes-Funktion von Laravel Eloquent ermöglicht die Speicherung rekursiver Abfragen in Methoden, um Code wiederverwendbar zu machen. Dadurch bleibt der Code schön und verständlich, insbesondere wenn die gleiche Art von Abfrage immer wieder benötigt wird. Abfragebereiche definieren allgemeine Abfragen als Methoden, die dann im gesamten Modell verwendet werden können.

1. Globale Bereiche

Erklärung:

Global Scopes sind immer an das Modell angehängt. Dieser Bereich funktioniert automatisch, wenn Sie das Modell verwenden, Sie müssen ihn nicht jedes Mal neu schreiben. Es wird normalerweise verwendet, um den Anmeldestatus, aktive Datensätze usw. zu überprüfen.

Erstellung des globalen Geltungsbereichs:

1. Globale Bereichsklasse erstellen:

Um einen Global Scope in Laravel zu erstellen, wird eine Klasse verwendet, die die Scope-Schnittstelle implementiert.

<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. Globalen Bereich an Modell anhängen:

Dies sollte zur booted()Methode Ihres Modells hinzugefügt werden.

<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>

Wenn Sie jetzt Post::all() verwenden, wird automatisch der active = 1-Filter angewendet.

3. Globalen Geltungsbereich vorübergehend weglassen:

<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>

Dadurch wird der globale Bereich vorübergehend gelöscht und alle Beiträge mit Ausnahme des active-Filters zurückgegeben.

2. Lokale Bereiche

Erklärung:

Lokale Bereiche fungiert als spezifischer Abfragebereich innerhalb des Modells und gilt nur, wenn Sie ihn explizit aufrufen. Es wird nicht automatisch bei jeder Abfrage angewendet, wie z. B. im globalen Bereich.

Lokalen Geltungsbereich schaffen:

Erstellen Sie einen lokalen Bereich, indem Sie dem Modell eine öffentliche Methode hinzufügen, deren erstes Argument Builder die Eingabe ist.

<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>

Lokalen Bereich verwenden:

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

Parameter zum lokalen Bereich hinzufügen:

Parameter können an den lokalen Bereich übergeben werden.

<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 kann jetzt mit dem status-Parameter verwendet werden:

<code class="language-php">// সক্রিয়  পোস্ট  পেতে:
$posts = Post::active()->get();

// ড্রাফট  পোস্ট  পেতে:
$draftPosts = Post::draft()->get();

// চেইন  করে  ব্যবহার:
$activeDraftPosts = Post::active()->draft()->get();</code>

'published' ist der Parameter.

3. Dynamische Bereiche

Dynamic Scope ist eine Art lokaler Bereich, bei dem der Bereichsname dynamisch aufgerufen werden kann. Laravel erlaubt die Verwendung von scopeName()Typnamen.

<code class="language-php">class Post extends Model
{
    // লোকাল  স্কোপ
    public function scopeStatus($query, $status)
    {
        return $query->where('status', $status);
    }
}</code>

Bereich kann jetzt dynamisch aufgerufen werden:

<code class="language-php">$posts = Post::status('published')->get();</code>

Dies funktioniert genauso wie die scopePublished() Methode.

4. Mehrere Bereiche

Mehrere Bereiche können verkettet werden. Beispielsweise können die Bereiche status und active zusammen verwendet werden:

<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>

Dies gilt sowohl active als auch status('published').

5. Verkettbarer Bereich

Eloquents Lokale Bereiche sind verkettbar, was bedeutet, dass mehrere Bereiche gleichzeitig verwendet werden können.

<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>

Es gibt drei Bereiche und einen orderByverkettet.

Das obige ist der detaillierte Inhalt vonLaravel Eloquent ORM in Bangla-Teilabfragebereichen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn