Изучение различных методов извлечения объектов терминов таксономии Drupal 9 по словарному имени машины (видео)

В Drupal 9 термины таксономии играют решающую роль в организации и категоризации контента. Извлечение объектов терминов таксономии по их словарному имени (vid) может быть распространенным требованием при разработке Drupal. В этой записи блога мы рассмотрим различные методы и приведем примеры кода, которые помогут вам выполнить эту задачу.

Метод 1: использование службы TaxonomyTermStorage
Один из способов получения объектов терминов таксономии по имени словарной машины — использование службы TaxonomyTermStorage, предоставляемой Drupal. Этот метод позволяет запрашивать термины таксономии непосредственно из базы данных.

use Drupal\taxonomy\TermStorageInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/
 * Example code to retrieve taxonomy term objects by vocabulary machine name.
 */
function getTermsByVocabularyMachineName($vid) {
  // Get the TaxonomyTermStorage service.
  $termStorage = \Drupal::service('entity_type.manager')->getStorage('taxonomy_term');
  // Load the vocabulary by machine name.
  $vocabulary = \Drupal::entityTypeManager()->getStorage('taxonomy_vocabulary')->load($vid);
  // Get the term IDs for the given vocabulary.
  $termIds = $termStorage->getQuery()
    ->condition('vid', $vocabulary->id())
    ->execute();
  // Load the term entities using the term IDs.
  $terms = $termStorage->loadMultiple($termIds);
  return $terms;
}

Метод 2. Использование подхода EntityQuery.
Другой метод предполагает использование класса EntityQuery для создания запроса, который извлекает термины таксономии на основе имени словарной машины.

use Drupal\taxonomy\Entity\Term;
use Drupal\taxonomy\Entity\Vocabulary;
/
 * Example code to retrieve taxonomy term objects by vocabulary machine name.
 */
function getTermsByVocabularyMachineName($vid) {
  // Load the vocabulary by machine name.
  $vocabulary = Vocabulary::load($vid);
  // Use EntityQuery to retrieve the term entities.
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->condition('vid', $vocabulary->id());
  $termIds = $query->execute();
  // Load the term entities using the term IDs.
  $terms = Term::loadMultiple($termIds);
  return $terms;
}

Метод 3. Пользовательский запрос к базе данных.
Если вы предпочитаете более прямой подход, вы можете выполнить собственный запрос к базе данных, чтобы получить термины таксономии на основе имени словарной машины.

/
 * Example code to retrieve taxonomy term objects by vocabulary machine name.
 */
function getTermsByVocabularyMachineName($vid) {
  $database = \Drupal::database();
  $query = $database->select('taxonomy_term_field_data', 't')
    ->fields('t', ['tid'])
    ->condition('vid', $vid)
    ->execute();
  $termIds = $query->fetchAll(\PDO::FETCH_COLUMN);
  // Load the term entities using the term IDs.
  $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadMultiple($termIds);
  return $terms;
}

В этой статье мы рассмотрели различные методы получения объектов терминов таксономии Drupal 9 по имени словарной машины. Вы можете выбирать между использованием службы TaxonomyTermStorage, подходом EntityQuery или выполнением специального запроса к базе данных. Каждый метод обеспечивает разный уровень абстракции и гибкости, что позволяет вам выбрать тот, который лучше всего соответствует вашим конкретным требованиям. Освоив эти методы, вы будете лучше подготовлены к эффективной работе с терминами таксономии в Drupal 9.