2016-12-13 4 views
1

Ich lerne derzeit Laravel, ich frage mich, wenn ich Beziehung zu tun, links verlassen Abfrage, wird es zweimal abfragen?Laravel Beziehung Abfrage zweimal?

Wenn ja, was ist besser für die Leistung? Query Builder Link Join kann eine Abfrage speichern, die die ist, die ich normalerweise gehe mit

+3

Nur ein Hinweis: in Ihrer 'orders' Beziehungsmethode sollten Sie' '-> get()' nicht aufrufen, nur 'return $ this-> hasMany ('App \ Order', 'customer_id');' – Parziphal

Antwort

1

Query Builder ist besser für die Leistung.

https://blog.sriraman.in/laravel-eloquent-vs-fluent-query-builder/

+1

@Benjamin W ir werden 1000 Abfragen pro Anfrage in einem realen Projekt ausführen, also fragen Sie sich: Sind Sie bereit, alle Funktionen und Vorteile von Eloquent zu verlieren, um eine 1ms Abfrage anstelle von 2 ms Abfrage zu bekommen? –

+0

@AlexeyMezenin die OP gefragt, welche für die Leistung besser ist. Er hat die Antwort – scottevans93

+0

Ja, technisch ist es schneller. Aber ich habe gerade einige Abfragen verglichen, und der Unterschied zwischen der gesamten Anforderungsausführung ist 583,2 ms für den Abfragegenerator und 583,5 ms für Eloquent. Also würde ich sagen, dass Sie solche Benchmarks nicht sehen wollen, wenn Sie mit einer echten App zu tun haben. Sie verkaufen die Leistung von ORM, Lesbarkeit und Wartbarkeit für 1 ms Ausführungszeit. Das ist mein Punkt. –

2

würde ich eloquent Beziehungen sagen viel besser sind, weil -

von zwei Abfragen verwenden sie die Initialisierung von eloquent Modelle vereinfacht. Wenn Sie Join-Abfragen verwenden, besteht die Möglichkeit, dass zwei Spalten denselben Namen haben, z. B. id. Sie würden also explizit die Spalten auswählen.

Auf der Seite PHP würden Sie dann die Werte entsprechend entpacken, damit sie an die korrekte eloquent Klasse delegiert werden können. Dies würde die Ausführungszeit weiter erhöhen und die Speichernutzung erhöhen und ganz zu schweigen von der Komplexität des Codes.

1

Sie können zwar viele Datensätze gleichzeitig mithilfe des Abfrage-Generators (oder Raw SQL) abrufen, aber der offensichtliche Nachteil besteht darin, dass Sie keine Modellklasse verwenden können, da der Abfrage-Generator Arrays zurückgibt. Wie Sie vielleicht bereits wissen, sollen Modelle Ihnen nicht nur bei Abfragen helfen; sie sind darüber hinaus nützlich.

Und wie iCode gesagt hat (das hat geantwortet, während ich dies tippte), würden Sie sich fragen: "Warum fügt Laravel nur Spalten hinzu, um nur eine Abfrage auszuführen und dann alle Modelle zu erstellen?" Nun, die Abfrage selbst und die Logik in PHP, die dafür benötigt wird, wären ziemlich komplex und es lohnt sich nicht.

Wenn schließlich Eloquent Beziehungen eine Menge Abfragen speichern, wenn Sie eine Reihe von Customer Aufzeichnungen über ihre Order Datensätze abfragen: in einem solchen Fall alle Aufträge mit nur einer Abfrage getroffen werden.