D8の特定の分類用語について、それを参照するすべてのノードエンティティを返すAPI関数/メソッドはありますか?
loadByProperties()
を使用して、$term_id
を参照するすべてのノードエンティティを取得できます。
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'field_tags' => $term_id,
]);
私が考える最も簡単な方法は、データベースをクエリすることです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
、このビューは、基本的にデータベースクエリを実行している特定の用語ですべてのタグ付けされたコンテンツを表示する責任があります。
複数の用語IDがある場合は、単一の値の代わりにIDの配列を渡すことができます。
$term_ids = array (1,2,3);
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'field_tags' => $term_ids,
]);
ノードにリビジョンがない場合、このコードは機能し、デフォルトでは最初のリビジョンを返します
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->condition('field_tags', $termId)
->execute();
ノードに複数のリビジョンがある場合、最新のタグ付けされたリビジョンでノードを取得するには、次のコードを使用する必要があります
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termId, '=')
->execute();
複数の値がある場合は、arrayを使用できます
$termIds = [3,56,456];
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termIds)
->execute();