Heim >Datenbank >MySQL-Tutorial >Laravel Eloquent ORM in Bangla-Teilabfragebereichen)
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.
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.
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.
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.
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>
<code class="language-php">$posts = Post::withoutGlobalScope(ActiveScope::class)->get();</code>
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.
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.
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')
.
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 orderBy
verkettet.
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!