Technisch gesehen, ja, wenn Sie Ihre eigenen db_query()
Anweisungen schreiben , werden die Daten schneller und mit weniger Aufwand zurückgegeben. Es ist jedoch nicht wirklich der "Drupal-Weg", Dinge zu tun.
node_load()
stellt einen 'statischen' Cache bereit; Mit anderen Worten, wenn Sie denselben Knoten zweimal auf einer Seitenanforderung laden, wird er die Datenbank nur einmal treffen.
Was Sie wirklich verpassen, wenn Sie nicht verwenden, node_load()
sind alle API-Hooks und die Modulintegration von Drittanbietern. Wenn Sie ein CCK-Feld benötigen, werden node_load()
alle diese Daten für Sie abgerufen, wobei für eine manuelle Abfrage viele Verknüpfungen erforderlich wären.
Wie Sie bemerken, gibt es eine Menge zusätzlicher Verarbeitung / Laden, die Sie im gegebenen Moment möglicherweise nicht benötigen. Wenn Sie die Daten nicht benötigen, schadet es Ihnen technisch nicht, sie nicht zu haben. Es liegt wirklich an Ihnen, ob Sie diesen Weg gehen möchten.
Der Hauptgrund für die Verwendung von IMO, node_load()
obwohl Sie die zusätzlichen Daten möglicherweise nicht benötigen, ist nur zum Zweck der Standardisierung. Sie müssen sich keine Gedanken darüber machen, welche Daten Sie zu einem bestimmten Zeitpunkt haben. Sie haben einen vollständig geladenen Knoten und mehr Optionen zum Anpassen der Daten nach Bedarf durch hook_nodeapi()
. Andere Entwickler, die sich Ihren Code ansehen, können leichter verstehen, womit sie arbeiten. Außerdem müssen Sie 6 Monate später, wenn Sie ein neues Feature / Anzeigefeld hinzufügen, Ihre Abfragen nicht anpassen.
node_load ist definitiv ein Ressourcenfresser, aber ich habe es meiner Erfahrung nach besser gefunden. Drupal 7 verbessert die Situation erheblich, indem node_load_multiple () bereitgestellt wird, was, wie der Name schon sagt, die Anzahl der Abfragen beim Laden mehrerer Knoten verringert.
node_load()
sind die Kompatibilität mit zukünftigen Versionen von Drupal und die Integration mit anderen Modulen, wodurch das von der Funktion zurückgegebene Ergebnis geändert werden kann. Was den ersten Punkt betrifft, so ist dies bei Drupal 7 offensichtlich: Die Abfrage zum Abrufen eines vollständigen Knotenobjekts unterscheidet sich erheblich von der bei Drupal 6 verwendeten. Außerdem werden die an der Abfrage beteiligten Datenbanktabellen geändert.Führen Sie, wie in Jakarskas Antwort erläutert
node_load()
,node_load_mutliple()
mehr als nur eine DB-Abfrage durch. Sie kümmern sich darum, alle von den aktivierten Modulen Ihrer Site implementierten Node Building Hooks aufzurufen .Darüber hinaus können Sie in Drupal 7 mit der Einführung steckbarer Feldspeicher bei der Arbeit an wiederverwendbarem Code nicht wissen, ob Ihre Felddaten in Ihrer (Haupt-) Datenbank verfügbar sind oder nicht. Als allgemeine Regel gilt, würde ich verwenden
node_load()
,node_load_mutliple()
undEntityFieldQuery
zu Abfrage für Knoten. Wenn Sie nur ein bestimmtes Feld für mehrere Knoten benötigen, können Sie es auchfield_attach_load()
mit einem$options['field_id']
für die Ergebnisse eines Knotens verwendenEntityFieldQuery
.Also, ich würde nicht für eine benutzerdefinierte SQL - Abfrage gehen , wenn der Code sicher ist , in den Fällen verwendet werden , wo alles, was
node_load()
,node_load_mutliple()
undEntityFieldQuery
bieten nicht, und wird es nie sein, benötigt und auf Daten , die sind und werden immer, gespeichert in die SQL-Datenbank.quelle
node_load()
ist der "Drupal Weg"; Dies bedeutet, dass die API durch Aufrufen dieser Funktion eine Nachricht an Module sendet, wenn das Laden des Knotens gestartet wurde, damit diese ihre eigenen Informationen hinzufügen / ändern / entfernen können. Ja, verwendet sogarnode_load()
Caching, da es viele Abfragen verwendet.Sie können
db_select()
konkrete Daten auswählen, aber stellen Sie sicher, dass Sie korrekte Daten sammeln / ändern / löschen.quelle
Sie können sorgfältig eine Ansicht erstellen, um zu filtern und zu verknüpfen, was Sie möchten, und dann die Funktion views_get_view_result () verwenden, um das Ergebnis zu erhalten.
Und mit vorsichtig meine ich, dass Sie nur die Felder verwenden, die Sie benötigen. Wenn Sie beispielsweise ein Feld mit dem Knotentitel mit einem Link zu seinem Knoten einfügen, wird Ihre Abfrage in Ansichten erheblich länger, anstatt nur die Knoten-ID ohne Link zu verwenden.
Views ist ein leistungsstarker Abfrage-Generator, dessen programmgesteuerte Verwendung eine gute Antwort auf Ihr Problem sein kann. Sie können das Beste aus beiden Welten herausholen: einfache Abfragen, die mit Drupal kompatibel sind, und schnellere Ergebnisse im Vergleich zum Laden aller Daten einer bestimmten Entität.
Sie müssen Ihr Ansichtsmodul so konfigurieren, dass die generierten Abfragen beim Erstellen angezeigt werden. Es könnte auch nützlich sein, Ihre Ansichten als "System" oder ähnliches zu benennen oder zu kennzeichnen, um unerwünschte Überschreibungen zu vermeiden.
quelle