web-dev-qa-db-ja.com

名前で用語をロード

Drupal 7では、exの名前を使用して用語をロードできます。taxonomy_get_term_by_name($name)

Drupal 8)に名前を指定して用語を読み込む方法はありますか?

21
Amit Sharma

この機能はDrupal 8で廃止される予定です。
代わりに taxonomy_term_load_multiple_by_name 関数を使用してください。

<?php

  /**
   * Utility: find term by name and vid.
   * @param null $name
   *  Term name
   * @param null $vid
   *  Term vid
   * @return int
   *  Term id or 0 if none.
   */
  protected function getTidByName($name = NULL, $vid = NULL) {
    $properties = [];
    if (!empty($name)) {
      $properties['name'] = $name;
    }
    if (!empty($vid)) {
      $properties['vid'] = $vid;
    }
    $terms = \Drupal::entityManager()->getStorage('taxonomy_term')->loadByProperties($properties);
    $term = reset($terms);

    return !empty($term) ? $term->id() : 0;
  }

?>
19
DRUPWAY

entityTypeManager を使用するなどのスニペットコードを使用できます。

$term_name = 'Term Name';
$term = \Drupal::entityTypeManager()
      ->getStorage('taxonomy_term')
      ->loadByProperties(['name' => $term_name]);
35
MrD

複数の値を返す分類法関数の名前が変更されました に従い、 taxonomy_get_term_by_name($name, $vocabulary = NULL) の名前が変更されました taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) 。最初の関数のコードを見て、それを2番目の関数のコードと比較すると、最も関連する違いは taxonomy_term_load_multiple(array(), $conditions) への呼び出しが置き換えられていることに気付くでしょう。 entity_load_multiple_by_properties('taxonomy_term', $values) を呼び出します。

_// Drupal 7
function taxonomy_get_term_by_name($name, $vocabulary = NULL) {
  $conditions = array('name' => trim($name));
  if (isset($vocabulary)) {
    $vocabularies = taxonomy_vocabulary_get_names();
    if (isset($vocabularies[$vocabulary])) {
      $conditions['vid'] = $vocabularies[$vocabulary]->vid;
    }
    else {
      // Return an empty array when filtering by a non-existing vocabulary.
      return array();
    }
  }
  return taxonomy_term_load_multiple(array(), $conditions);
}
_
_// Drupal 8
function taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) {
  $values = array('name' => trim($name));
  if (isset($vocabulary)) {
    $vocabularies = taxonomy_vocabulary_get_names();
    if (isset($vocabularies[$vocabulary])) {
      $values['vid'] = $vocabulary;
    }
    else {
      // Return an empty array when filtering by a non-existing vocabulary.
      return array();
    }
  }
  return entity_load_multiple_by_properties('taxonomy_term', $values);
}
_

taxonomy_term_load_multiple_by_name()は廃止予定としてマークされていないため、taxonomy_get_term_by_name()を使用していた場所でその関数を引き続き使用できます。これらは両方とも同じ引数を必要とするので、Drupal 7のコードをDrupal 8のコードに変換すると、この場合、関数名を置き換えるだけです。

2
kiamlaluno

Drupal 8の用語名と語彙によって単一の用語IDをロードするには、次のスニペットを使用できます。

$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')
  ->loadByProperties(['name' => $term_name, 'vid' => 'job_category']);
$term = reset($term);
$term_id = $term->id();
1
Renuka Kulkarni

エンティティフィールドクエリを使用して、用語のフィールドごとに読み込むこともできます

$result = \Drupal::entityQuery('taxonomy_term')
          ->condition('field_my_field_name', 'Whatever Value')
          ->execute();
1
frazras