Drupal 7 bietet mit EntityFieldQuery ein vielversprechendes ORM-ähnliches Abfragesystem.
Derzeit verstehe ich, wie man Knoten auswählt, aber das Ergebnis enthält keine spezifischen Informationen, wie zum Beispiel die von mir gesuchten Dateien.
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'event')
->propertyCondition('status', 1)
->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
->fieldOrderBy('field_date', 'value', 'ASC')
->execute();
Wir müssen also ganze Daten von Knoten laden, wenn wir nur Werte eines Feldes erhalten möchten, zum Beispiel 'field_date' im aktuellen Beispiel.
$nodes = entity_load('node', array_keys($entities['node']));
Wenn es eine Möglichkeit gibt, den Wert von Feldern abzurufen, laden Sie stattdessen die vollständigen Daten aller Knoten, da dies zu einer gewissen Speicherüberlastung führt.
$nodesFieldDates = ???
Ich habe die Antwort dafür gefunden! Das Apache Solr-Modul erweitert die EntityFieldQuery-Klasse , um dies zu ermöglichen. Es wird eine neue Methode namens addExtraField hinzugefügt.
Wenn Sie Apache Solr nicht installiert haben, kopieren Sie einfach den Code zum Erweitern dieser Klasse.
quelle
Sie müssen nichts überschreiben oder die Klasse erweitern. Sie müssen nur
field_attach_load()
das gewünschte Feld an die Ergebnisse derEntityFieldQuery
Klasse anhängen .Siehe auch Laden von nur einem Feld von einer Entität oder einem Knoten in Drupal 7 , ein guter Artikel mit Beispielen dazu.
quelle
Wer noch Felder von einem EFQ erhalten möchte, schaut sich das EFQ-Zusatzfelder- Modul an.
quelle