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

Laravel Eloquent ORM in Bangla-Teilabfragebereichen)

Mary-Kate Olsen
Freigeben: 2025-01-16 20:03:11
Original
920 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Lokalen Bereich verwenden:

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

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

'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>
Nach dem Login kopieren

Bereich kann jetzt dynamisch aufgerufen werden:

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

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage