Was ist die richtige Verwendung von EntityFieldQuery?
37
In Drupal 7 wurde die API-Dokumentation für die node_load_multiple()Angabe der Verwendung des $conditionsParameters zugunsten der Verwendung verworfen EntityFieldQuery. Wie verwendet man die Klasse, um eine Liste von Knoten-IDs zur Verwendung mit zu generieren node_load_multiple()? Gibt es noch andere Anwendungsfälle dafür?
EntityFieldQuery verwendet eine Reihe von Hooks für die Schnittstelle zu Feldspeichermodulen, z. B. Field SQL Storage, um für Felder und andere Knoteneigenschaften zu arbeiten. Langfristig ist EntityFieldQuery eine viel zuverlässigere Methode zum Abfragen eines beliebigen Entitätstyps. In einigen Situationen kann es auch entitätsübergreifende Abfragen durchführen ( ein Beispiel finden Sie unter field_has_data oder _list_values_in_use () .
Hier ist ein einfaches Beispiel für die Verwendung von EntityFieldQuery, um eine Liste aller Knoten zu erhalten, die vor einem bestimmten Zeitstempel veröffentlicht wurden:
field_has_data ist ein besseres Beispiel als _list_values_in_use
15
Ich habe auf Drupal ein Problem beim Hinzufügen von Beispielen für gefunden EntityFieldQuery. Ich habe es für Beispiele verwendet und meine Meinung zum Aufruf für weitere Beispiele geäußert.
Achtung, die Methode fieldOrderBy lässt alle Knoten aus, bei denen das zugehörige Feld leer ist. Dies ist verwirrend, da hier nur sortiert und nicht gefiltert werden soll (es ist zu erwarten, dass sich Knoten mit leerem Feld oben oder unten in der Ergebnismenge befinden). Weitere Informationen und hoffentlich eine Lösung finden Sie hier drupal.org/node/1611438 und hier drupal.org/node/1662942
Hiermit werden Knoten ausgewählt, deren Body-Feld mit "A" beginnt. Siehe auch EntityFieldQuery :: execute () zur Verwendung des zurückgegebenen Ergebnisses.
Es gibt viele Anwendungsfälle. Das typische Beispiel ist die Abfrage von Entitäten nach einem bestimmten Feldwert, wie z. B. dem Body-Feld (siehe erstes Beispiel).
Der Vorteil ist, dass es funktioniert, egal welchen field_storage Sie verwenden. Beispielsweise können Sie Ihre Felder in MongoDB haben und EntityQuery funktioniert weiterhin, während die manuelle Abfrage von field_data_body nicht funktioniert.
array ('TYPE'=>
array (123=>
stdClass::__set_state(array('nid'=>'123',// Can be also tid when loading terms.'key'=>'value',)),456=>
stdClass::__set_state(array('nid'=>'456','key'=>'value',)),),)
Um die ID aus dem Ergebnis Array zu holen, können Sie verwenden: current(current($result))->tid.
Hier ist ein erweitertes Beispiel:
<?php
$query =newEntityFieldQuery();
$query->entityCondition('entity_type','node')->entityCondition('bundle','article')->propertyCondition('status', NODE_PUBLISHED)->fieldCondition('field_news_types','value','spotlight','=')->fieldCondition('field_photo','fid','NULL','!=')->fieldCondition('field_faculty_tag','tid', $value)->fieldCondition('field_news_publishdate','value', $year .'%','like')->fieldOrderBy('field_photo','fid','DESC')->range(0,10)->addMetaData('account', user_load(1));// Run the query as user 1.
$result = $query->execute();if(isset($result['node'])){
$news_items_nids = array_keys($result['node']);
$news_items = entity_load('node', $news_items_nids);}?>
Ich habe auf Drupal ein Problem beim Hinzufügen von Beispielen für gefunden
EntityFieldQuery
. Ich habe es für Beispiele verwendet und meine Meinung zum Aufruf für weitere Beispiele geäußert." Brauchen wir ein EntityFieldQuery-Beispiel? "
Der Kommentar # 11 zeigt die Verwendung von
node_load_multiple()
wie folgt:quelle
Hier ist ein Beispiel aus einem der Testmodule:
http://api.drupal.org/api/drupal/modules--node--tests--node_access_test.module/function/node_access_entity_test_page/7
Hiermit werden Knoten ausgewählt, deren Body-Feld mit "A" beginnt. Siehe auch EntityFieldQuery :: execute () zur Verwendung des zurückgegebenen Ergebnisses.
Es gibt viele Anwendungsfälle. Das typische Beispiel ist die Abfrage von Entitäten nach einem bestimmten Feldwert, wie z. B. dem Body-Feld (siehe erstes Beispiel).
Der Vorteil ist, dass es funktioniert, egal welchen field_storage Sie verwenden. Beispielsweise können Sie Ihre Felder in MongoDB haben und EntityQuery funktioniert weiterhin, während die manuelle Abfrage von field_data_body nicht funktioniert.
quelle
Mit der EntityFieldQuery- Klasse können Sie die Datenbank abfragen und die Ergebnisse in einer Liste abrufen , die der ähnelt
node_load_multiple()
.Dies kann erreicht werden, indem eine Klasse erstellt, die Bedingungen angewendet und die Abfrage ausgeführt wird. Beispiel:
Dadurch wird das Array wie folgt generiert:
Um die ID aus dem Ergebnis Array zu holen, können Sie verwenden:
current(current($result))->tid
.Hier ist ein erweitertes Beispiel:
Weitere Informationen finden Sie unter: Verwendung von EntityFieldQuery auf Drupal.org.
quelle