web-dev-qa-db-ja.com

分類法のカスタムフィールド値にアクセスする(Drupal 7)?

分類法に新しい語彙を追加し、その新しい語彙にいくつかのカスタムフィールドを追加しました。 taxonomy_term_dataテーブルに、tid、vid、name、description、format、およびweightフィールドの値が表示されています。また、新しい語彙(field_data_field_taxonomy_cip_code)用に作成した新しいカスタムフィールドに関連するデータベースに新しいテーブルがいくつかあるようです。新しいテーブルの値は、entity_type、bundle、deleted、entity_id、revision_id、language、delta、field_taxonomy_cip_code_value、およびfield_taxonomy_cip_code_formatです。 2つのテーブルを関連付けることができるように表面上で確認できるものはありません。

新しい語彙の値とともに追加のカスタムフィールド値を取得するにはどうすればよいですか?

3
cmmsites

私があなたの質問を理解している場合、taxonomy_term_data.tidは、field_taxonomy_cip_code_value.entity_idのようなものに関連しているはずです。 Drupal 7では、7つの分類用語がエンティティになりました。

データベースのエンティティIDとバンドル値は通常、テーブル間の「フィールド」を関連付けるために使用されるデータベースキーです(drupal「フィールド」は複数のバンドル間で再利用できるため)。

0
tenken

taxonomy_term_load() を使用して分類用語をロードすると、ボキャブラリに追加したカスタムフィールドが取得されます。

ブールフィールド(field_test_boolean)を追加するボキャブラリを作成しました。その語彙に分類用語を追加し、次のコードを実行しました。 (22は、作成した分類用語の分類用語IDです。)

_$taxonomy_term = taxonomy_term_load(22);
dsm($taxonomy_term);
_

dsm()の出力は次のようになります。

screenshot

現在フィールドに設定されている言語のフィールド値を取得する場合は、次のコードを使用する必要があります。

_$values = field_get_items('taxonomy_term', $taxonomy_term, 'field_test_boolean');
_

カスタムフィールドに特定の値が含まれる分類用語を検索する必要がある場合は、 EntityFieldQuery クラスを使用する必要があります。

_  $query = new EntityFieldQuery();
  $entities = $query->entityCondition('entity_type', 'taxonomy_term')
    ->entityCondition('bundle', 'fields_test')
    ->fieldCondition('field_test_boolean', 'value', 1, '=')
    ->execute();

  if (!empty($entities['taxonomy_term'])) {
    $taxonomy_terms = taxonomy_term_load_multiple(array_keys($entities['taxonomy_term']));
  }
_

注意

コメントで気づいたように、分類用語にEntityFieldQueryクラスを使用できないバグがあります。コードはDrupal 7開発スナップショットで修正されているようですが、Drupal 7.14はバグの影響を受けています。

8
kiamlaluno

@kiamlalunoは正しいです。これにより、データベース内のエンティティにフィールドを結合できます。

SELECT td.* FROM taxonomy_term_data td
INNER JOIN field_data_field_taxonomy_cip_code f ON f.entity_id = td.tid AND f.entity_type = 'taxonomy_term'

分類用語はエンティティであり、tidはentity_idで、entity_typeはtaxonomy_termです。

0
zwirbeltier