Wie werden alle Knotenentitäten mit einem bestimmten Begriff versehen?

10

Gibt es für einen bestimmten Taxonomiebegriff in D8 eine API-Funktion / -Methode, die alle Knotenentitäten zurückgibt, die darauf verweisen?

Peter T Graber
quelle

Antworten:

12

Sie können verwenden loadByProperties(), um alle Knotenentitäten abzurufen, die auf Folgendes verweisen $term_id:

$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
  'field_tags' => $term_id,
]);
4k4
quelle
funktioniert nicht für Drupal 8
Ekta Puri
9

Ich denke, der einfachste Weg, eine Datenbanktabelle abzufragen, zeichnet auf, taxonomy_indexwelcher Knoten mit welchem ​​Begriff versehen ist

function _get_nodes_by_term($term_id) {
  $query = \Drupal::database()->select('taxonomy_index', 'ti');
  $query->fields('ti', ['nid']);
  $query->condition('ti.tid', $term_id);
  $nodes = $query->execute()->fetchAssoc();
  return $nodes;
}

dpm(_get_nodes_by_term(<term_id>));

Drupal Core macht es durch Ansichten.
Die sofort einsatzbereite Seitenanzeige wird von Ansichten erstellt. Wenn Sie also besuchen admin/structure/views/view/taxonomy_term, ist diese Ansicht dafür verantwortlich, alle mit Tags versehenen Inhalte nach bestimmten Begriffen anzuzeigen, für die im Wesentlichen eine Datenbankabfrage ausgeführt wird.

arpitr
quelle
5

Wenn Sie mehrere Term-IDs haben, können Sie ein Array der IDs anstelle nur eines einzelnen Werts übergeben.

$term_ids =  array (1,2,3);
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
  'field_tags' => $term_ids,
]);
Wendy Weihs
quelle
1

Wenn Ihre Knoten keine Revision haben, funktioniert dieser Code. Standardmäßig wird die erste Revision zurückgegeben

  $nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
 ->condition('field_tags', $termId)
 ->execute();

Wenn Ihre Knoten mehrere Revisionen haben, Um die Knoten durch die letzte markierte Revision zu erhalten. Sie müssen den folgenden Code verwenden

$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termId, '=')
->execute();

Wenn Sie mehrere Werte haben, können Sie ein Array verwenden

 $termIds = [3,56,456];
 $nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
 ->latestRevision()
 ->condition('field_tags', $termIds)
 ->execute();
Karthikeyan Manivasagam
quelle