Tauchen Sie ein in Laravel Eloquent: Entdecken Sie whereRelation
und seine praktischen Anwendungen
Dieser Beitrag untersucht Laravel's Eloquent ORM, wobei der Schwerpunkt auf der whereRelation
-Methode liegt und sie mit der älteren whereHas
-Methode verglichen wird. Wir untersuchen seine Stärken und Grenzen und führen Sie zu einer optimalen Nutzung.
Szenario: Abrufen von Benutzern mit abgeschlossenen Bestellungen. Vor Laravel 8 war whereHas
der Standard für die Abfrage verwandter Tabellenspalten. Laravel 8 führte whereRelation
ein und bietet eine prägnantere Syntax.
Die verbesserte Syntax ist unbestreitbar sauberer!
Leistung und Einschränkungen: Ein weit verbreitetes Missverständnis ist, dass whereRelation
whereHas
übertrifft. Die Analyse zeigt jedoch, dass beide identische SQL-Abfragen generieren:
whereHas
Abfrage:
<code class="language-sql">select * from `users` where exists ( select * from `orders` where `users`.`id` = `orders`.`created_by` and `status` = ? and `orders`.`deleted_at` is null ) and `users`.`deleted_at` is null</code>
whereRelation
Abfrage:
<code class="language-sql">select * from `users` where exists ( select * from `orders` where `users`.`id` = `orders`.`created_by` and `status` = ? and `orders`.`deleted_at` is null ) and `users`.`deleted_at` is null</code>
Der Hauptunterschied liegt in der Funktionalität. whereRelation
ist auf einzelne Bedingungen in der zugehörigen Tabelle beschränkt, während whereHas
mehrere Bedingungen innerhalb einer einzelnen Unterabfrage unterstützt. whereRelation
würde für jede Bedingung eine separate Unterabfrage erstellen, was sie für mehrere Kriterien ineffizient machen würde.
Die Wahl der richtigen Eloquent-Methode ist entscheidend für die Lesbarkeit und Effizienz des Codes. Berücksichtigen Sie die Komplexität Ihrer Abfrage, bevor Sie whereHas
oder whereRelation
auswählen. Viel Spaß beim Codieren! ?
Das obige ist der detaillierte Inhalt vonLaravel-Tipp: whereHas oder whereRelation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!