特定の用語でタグ付けされたすべてのノードエンティティを取得するにはどうすればよいですか?


回答:


12

を使用loadByProperties()して、以下を参照するすべてのノードエンティティを取得できます$term_id

$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
  'field_tags' => $term_id,
]);

drupal 8で働いていない
Ekta Puri

9

私が考える最も簡単な方法は、データベースtaxonomy_indexテーブルにクエリを実行して、どのノードにどの用語がタグ付けされているかを記録することです

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はビューによってそれを行います。基本的な
用語のページ表示はビューによって作成されるため、にアクセスするとadmin/structure/views/view/taxonomy_term、このビューは、基本的にデータベースクエリを実行している特定の用語ですべてのタグ付けされたコンテンツを表示する責任があります。


5

複数の用語IDがある場合は、単一の値の代わりにIDの配列を渡すことができます。

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

1

ノードにリビジョンがない場合、このコードは機能し、デフォルトでは最初のリビジョンを返します

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

ノードに複数のリビジョンがある場合、最新のタグ付けされたリビジョンでノードを取得します。次のコードを使用する必要があります

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

複数の値がある場合は、配列を使用できます

 $termIds = [3,56,456];
 $nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
 ->latestRevision()
 ->condition('field_tags', $termIds)
 ->execute();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.