Доступ к пользовательским значениям полей таксономии (Drupal 7)?


Я добавил новый словарь в таксономию, а затем продолжил добавлять несколько пользовательских полей в этот новый словарь. В таблице taxonomy_term_data я вижу значения для полей tid, vid, имя, описание, формат и вес. Также похоже, что в базе данных теперь есть пара новых таблиц, связанных с новыми настраиваемыми полями, которые я создал для нового словаря (т. Е. field_data_field_taxonomy_cip_code). Значения в новой таблице являются entity_type, пакет, удален, идентификатор сущности, идентификатор ревизии, язык, дельта, значение field_taxonomy_cip_code_value и формат field_taxonomy_cip_code_. На поверхности я не вижу ничего, что позволило бы мне связать эти две таблицы вместе.

Как бы я мог использовать дополнительные значения настраиваемых полей вместе с новыми значениями словаря?

Author: kiamlaluno, 2012-06-28

3 answers

Если я правильно понял ваш вопрос, taxonomy_term_data.tid должен относиться к типу field_taxonomy_cip_code_value.entity_id. В Drupal 7 термины таксономии теперь являются сущностями.

Идентификаторы сущностей и значения пакетов в базе данных обычно являются ключами базы данных, используемыми для связи "полей" между таблицами (поскольку "Поля" drupal могут быть повторно использованы в нескольких пакетах).

 0
Author: tenken, 2012-06-28 16:12:16

Если вы загрузите термин таксономии с помощью taxonomy_term_load(), вы получите любое пользовательское поле, добавленное в словарь.

Я создал словарь, в который я добавил логическое поле (field_test_boolean); Я добавил термин таксономии в этот словарь, а затем выполнил следующий код. (22 - идентификатор термина таксономии для созданного мной термина таксономии.)

$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
Author: kiamlaluno, 2013-11-18 12:50:28

@киамлалуно прав. И таким образом вы можете присоединить поля к его сущности в базе данных с помощью:

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
Author: zwirbeltier, 2012-06-28 18:35:58