In Yii2 gibt es keine solche Funktionalität. CakePHP führt auch mehrere Abfragen im Hintergrund aus und wickelt sie einfach in einen Multithread-Aufruf ein. Der Hauptgeschwindigkeitsvorteil, den Sie erzielen würden, wenn Sie tatsächlich nur eine einzelne Abfrage durchführen könnten.
Es gibt zwei Möglichkeiten, dies zu erreichen:
- Ihren Weg ... Abrufen alles und führen Sie sie in Ihrem Code
- NestedSet Muster wie oben
in einem Kommentar erwähnt
NestedSet
Für Yii2 gibt es eine sehr gute Erweiterung, die das verschachtelte Mengenmuster implementiert. Sie können es hier finden:
https://github.com/creocoder/yii2-nested-sets
Vor- und Nachteile
Der Vorteil ist - natürlich -, dass man alles mit einer einzigen Abfrage holen kann. Sie können sogar mehrere Bäume in einer Tabelle speichern.
Der Hauptnachteil ist Sortierspalten entsprechend, während immer noch die Baumstruktur beibehalten wird. Der verschachtelte Satz ist mit zwei Attributen organisiert: links und rechts. Das bedeutet, dass alle Daten nach diesen beiden Attributen sortiert sind. Um eine Baumstruktur zu erhalten, die zB nach Namen sortiert ist, müssen Sie noch eine codeseitige Funktionalität implementieren, um den empfangenen Datensatz nach der Abfrage zu ändern. Der sauberste Weg, um die Daten zu sortieren beim Speichern ... einen neuen Datensatz nach seiner Stelle einfügen Bedeutung in Ihrem
Wikipedia hat eine sehr gute explenation des verschachtelten Satzes Sortierung gewünscht: https://en.wikipedia.org/wiki/Nested_set_model
Diese Abbildung zeigt so funktioniert es:
Beispiel: ‚Hosen‘ und ‚Jacken‘ Kinder ‚Anzüge‘ sind, da beide ihre linke und rechte Attribute sind zwischen dem linken (3) und rechts (8) Wert von ' Anzüge ". Wenn Sie ein Kind zu 'Jacken' hinzufügen wollten, würden Sie es zwischen 6 und 7 injizieren ... und daher alle Werte höher oder gleich 7 um zwei erhöhen. Das neu injizierte Kind von "Jacken" würde dann einen linken Wert von 7 und einen rechten Wert von 8 erhalten.
Wie Sie sehen können, können Sie jetzt ganz einfach einen ganzen (Teil-) Baum durch einfaches Filtern der linken und rechten Attribute abrufen. Ich f Sie alles von Klagen "nach unten Ihre Frage wollte würde wie folgt aussehen:
SELECT * FROM mytable WHERE left >= 3 AND right <= 8 ORDER BY left ASC
abschließende Antwort auf Ihre Frage
Wenn Ihr Schwerpunkt Komfort
No. Es gibt keine solche Funktionalität. Wenn Sie immer noch einen regulären Baum in Ihrer Datenbank haben wollen und sich nur nicht um die Zusammenführung der Daten kümmern wollen, müssten Sie eine ähnliche Funktionalität für CakePHPs Methoden schreiben. Das sollte ziemlich einfach sein und ich denke, dass sich viele Leute dafür interessieren würden.
Wenn Ihr Hauptanliegen ist die Geschwindigkeit
Verwenden Sie den verschachtelten Satz. Es ist ein höllisches Muster und sooo stark!
Es gibt keine Funktion dafür, aber Sie könnten [verschachtelte Listen] (https://github.com/creocoder/yii2-nested-sets) verwenden. – Beowulfenator
Yi's AR kann hierarchische Daten in einem einzigen Aufruf nicht füllen. Sie können eine baumartige Arraystruktur mithilfe von Referenzen erstellen, um Rekursionen zu vermeiden. Wenn Sie daran interessiert sind, kann ich ein Beispiel veröffentlichen. – nineinchnick
@nineinchnick ja bitte ich möchte das Beispiel sehen. – ankitr