Как запросить все поля узла, помеченного термином таксономии из определенного словаря
Я изо всех сил пытаюсь найти способ получить все поля узлов, в которых реализована определенная таксономия. Я был близок к тому, чтобы найти что-то с помощью этого запроса:
$query = db_query('SELECT fci.field_name
FROM d7_field_config_instance fci
LEFT JOIN (SELECT tv.vid, tv.machine_name
FROM d7_taxonomy_vocabulary tv
LEFT JOIN d7_taxonomy_term_data ttd
ON tv.vid = ttd.vid
WHERE ttd.tid = 76) AS tax
ON tax.machine_name LIKE fci.bundle'));
Но похоже, что machine_name
и bundle
имеют разные значения для одной и той же технологии.
Идея такова: Из идентификатора таксономии => найти вид таксономии (идентификатор словаря) => найти имя машины словаря => найти пакеты, в которых используется этот словарь.
Буду признателен за любую помощь.
Решение: Благодаря ответу @Eugis (Принятый ответ) я придумал это решение:
db_query("SELECT fcf.field_name, fcf.data FROM
(SELECT fc.field_name, fc.data FROM field_config fc
WHERE fc.type LIKE 'taxonomy_term_reference') AS fcf
INNER JOIN field_config_instance fci
ON fcf.field_name = fci.field_name
AND fci.bundle LIKE :bundle",
array(':bundle'=> $bundle));
Надеюсь, это поможет кому-то еще.
1 answers
Я думаю, вам следует проверить таблицу field_config
, где type = 'taxonomy_term_reference'
.
Название словаря, на которое ссылается поле, хранится в столбце data
как BLOB
. вы можете использовать функцию unserialize php для извлечения данных, хранящихся в BLOB
. Это потому, что вы не можете связаться с ним с помощью одного запроса select.
Попробуйте использовать циклы и ifs:)