Đối với một thuật ngữ phân loại nhất định trong D8, có bất kỳ hàm / phương thức API nào trả về tất cả các thực thể nút tham chiếu đến nó không?
Đối với một thuật ngữ phân loại nhất định trong D8, có bất kỳ hàm / phương thức API nào trả về tất cả các thực thể nút tham chiếu đến nó không?
Câu trả lời:
Cách dễ nhất tôi nghĩ là truy vấn taxonomy_index
bảng cơ sở dữ liệu sẽ ghi lại nút nào được gắn thẻ với thuật ngữ nào
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 làm điều đó bằng quan điểm.
Hiển thị trang ngoài hộp hạn được tạo bởi các khung nhìn, vì vậy nếu bạn truy cập admin/structure/views/view/taxonomy_term
, chế độ xem này có trách nhiệm hiển thị tất cả nội dung được gắn thẻ theo thuật ngữ đã cho, về cơ bản là chạy truy vấn cơ sở dữ liệu.
Nếu bạn có nhiều id hạn, bạn có thể truyền một mảng id thay vì chỉ một giá trị.
$term_ids = array (1,2,3);
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties([
'field_tags' => $term_ids,
]);
Nếu các nút của bạn không có sửa đổi thì mã này sẽ hoạt động, theo mặc định, nó sẽ trả về phiên bản đầu tiên
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->condition('field_tags', $termId)
->execute();
Nếu các nút của bạn có nhiều sửa đổi, Để có được các nút bằng bản sửa đổi được gắn thẻ mới nhất. bạn cần sử dụng đoạn mã sau
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termId, '=')
->execute();
Nếu bạn có nhiều giá trị thì bạn có thể sử dụng mảng
$termIds = [3,56,456];
$nodes = \Drupal::entityTypeManager()->getStorage('node')->getQuery()
->latestRevision()
->condition('field_tags', $termIds)
->execute();