Доступ к пользовательским значениям полей таксономии (Drupal 7)?
Я добавил новый словарь в таксономию, а затем продолжил добавлять несколько пользовательских полей в этот новый словарь. В таблице taxonomy_term_data я вижу значения для полей tid, vid, имя, описание, формат и вес. Также похоже, что в базе данных теперь есть пара новых таблиц, связанных с новыми настраиваемыми полями, которые я создал для нового словаря (т. Е. field_data_field_taxonomy_cip_code). Значения в новой таблице являются entity_type, пакет, удален, идентификатор сущности, идентификатор ревизии, язык, дельта, значение field_taxonomy_cip_code_value и формат field_taxonomy_cip_code_. На поверхности я не вижу ничего, что позволило бы мне связать эти две таблицы вместе.
Как бы я мог использовать дополнительные значения настраиваемых полей вместе с новыми значениями словаря?
3 answers
Если я правильно понял ваш вопрос, taxonomy_term_data.tid должен относиться к типу field_taxonomy_cip_code_value.entity_id. В Drupal 7 термины таксономии теперь являются сущностями.
Идентификаторы сущностей и значения пакетов в базе данных обычно являются ключами базы данных, используемыми для связи "полей" между таблицами (поскольку "Поля" drupal могут быть повторно использованы в нескольких пакетах).
Если вы загрузите термин таксономии с помощью taxonomy_term_load(), вы получите любое пользовательское поле, добавленное в словарь.
Я создал словарь, в который я добавил логическое поле (field_test_boolean); Я добавил термин таксономии в этот словарь, а затем выполнил следующий код. (22 - идентификатор термина таксономии для созданного мной термина таксономии.)
$taxonomy_term = taxonomy_term_load(22);
dsm($taxonomy_term);
Вывод, показанный dsm()
, следующий.
Если вы хотите получить значение поля для языка, установленного в данный момент для поля, следует использовать следующий код.
$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 влияет ошибка.
@киамлалуно прав. И таким образом вы можете присоединить поля к его сущности в базе данных с помощью:
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.