Как запросить все поля узла, помеченного термином таксономии из определенного словаря


Я изо всех сил пытаюсь найти способ получить все поля узлов, в которых реализована определенная таксономия. Я был близок к тому, чтобы найти что-то с помощью этого запроса:

$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));

Надеюсь, это поможет кому-то еще.

Author: Ismail H, 2016-02-22

1 answers

Я думаю, вам следует проверить таблицу field_config, где type = 'taxonomy_term_reference'. Название словаря, на которое ссылается поле, хранится в столбце data как BLOB. вы можете использовать функцию unserialize php для извлечения данных, хранящихся в BLOB. Это потому, что вы не можете связаться с ним с помощью одного запроса select.

Попробуйте использовать циклы и ifs:)

 0
Author: Eugis, 2016-02-22 13:11:14