Der Abfragebereich in Laravel ist eine sehr wichtige Funktion, die es Ihnen ermöglicht, einige häufig verwendete Abfragemethoden im Modell zur Wiederverwendung in der gesamten Anwendung zu definieren. Diese Abfragebereiche können global (für das gesamte Modell gelten) oder lokal (nur für eine Methode des Modells gelten) sein.
In diesem Artikel stellen wir die Definition, Verwendung und einige Dinge vor, die beim Abfragebereich in Laravel beachtet werden sollten.
Der Abfragebereich ist eine anonyme Funktion, die einen $query-Parameter empfängt, der eine Instanz des Eloquent Query Builder ist. In dieser anonymen Funktion können Sie einige Abfragevorgänge für die Instanz ausführen, z. B. das Hinzufügen von Where-Klauseln, Order-By-Klauseln usw.
Das Folgende ist ein einfaches Beispiel für die Definition eines Abfragebereichs:
public function scopePublished($query) { return $query->where('status', '=', 'published'); }
Im obigen Beispiel definieren wir einen Abfragebereich mit dem Namen „publicated“, der in der Abfrage verwendet wird. Fügen Sie automatisch a hinzu where-Klausel zum Filtern veröffentlichter Modelle.
Abfragebereich zu verwenden ist sehr einfach, rufen Sie einfach die entsprechende Methode des Modells auf. Wenn wir beispielsweise im obigen Beispiel den veröffentlichten Abfragebereich verwenden, müssen wir nur den folgenden Code aufrufen:
$posts = Post::published()->get();
Der obige Code gibt eine Sammlung aller veröffentlichten Post-Instanzen zurück.
Wenn Sie Parameter an den Abfragebereich übergeben müssen, fügen Sie einfach Parameter in dieser Methode hinzu. Beispiel:
public function scopeCategory($query, $categoryId) { return $query->where('category_id', '=', $categoryId); }
Dieser Abfragebereich kann zum Filtern von Blogbeiträgen nach einer bestimmten Kategorie verwendet werden.
$posts = Post::category(1)->get();
Der obige Code gibt alle Blogbeiträge mit der Kategorie-ID 1 zurück.
Hinweis: Abfragebereiche können verkettet werden, sodass Sie mehrere Abfragebereiche gleichzeitig verwenden können, um präzisere Ergebnisse zu erhalten.
Wenn Sie im gesamten Modell denselben Abfragebereich verwenden möchten, können Sie eine globale Abfragebereichsdomäne definieren . Rufen Sie dazu einfach die Boot-Methode in Ihrem Modell auf und definieren Sie einen globalen Abfragebereich mithilfe der Methode static::addGlobalScope.
Das Folgende ist ein einfaches Beispiel für einen globalen Abfragebereich:
protected static function boot() { parent::boot(); static::addGlobalScope('active', function (Builder $builder) { $builder->where('active', '=', 1); }); }
Im obigen Beispiel definieren wir einen globalen Abfragebereich mit dem Namen „aktiv“ und beschränken ihn auf Datensätze, deren aktives Feld gleich ist 1.
Wenn Sie nun das Modell mit einer beliebigen Methode abfragen, wird der Abfragebereich automatisch wirksam.
Manchmal müssen wir möglicherweise den Abfragebereich eines bestimmten Modells entfernen. Laravel stellt die Methode „removeGlobalScope“ bereit, um uns dabei zu helfen.
Angenommen, wir haben einen globalen Abfragebereich mit dem Namen „aktiv“, können wir ihn mit der folgenden Methode entfernen:
$users = User::withoutGlobalScope('active')->get();
Der obige Code hat keine Auswirkung auf die aktive Domäne Einschränkungen für alle Benutzer.
Hinweis: Wenn Sie alle globalen Abfragebereiche entfernen möchten, können Sie die Methode withoutGlobalScopes verwenden.
$users = User::withoutGlobalScopes()->get();
Der obige Code gibt alle Benutzer zurück, die nicht durch einen globalen Abfragebereich eingeschränkt sind.
Zusammenfassung
Der Abfragebereich ist eine äußerst leistungsstarke Funktion in Laravel. Durch die Verwendung von Abfragebereichen können Sie allgemeine Abfragevorgänge problemlos in Ihrer gesamten Anwendung wiederverwenden und Ihren Code übersichtlicher organisieren. Das Erlernen der richtigen Verwendung von Abfragebereichen kann nicht nur Ihre Produktivität steigern, sondern Ihnen auch dabei helfen, robustere Anwendungen zu erstellen.
Das obige ist der detaillierte Inhalt vonLaravel-Abfragebereich. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!