Время от времени продолжаю кодить под drupal 7, публикую еще один пример для работы EntityFieldQuery, на этот раз с фильтром по полю типа term reference.
Основная логика точно такая же как и при работе с data полями (где у нас хранятся тексты или числа). Отличие только одно — у референсного поля в базе данных наименование столбца данных в зависимости от типа ссылки может принимать разные значения. Например, для term reference это ‘tid’.
1 2 3 4 5 6 |
$Query = new EntityFieldQuery(); $Query->entityCondition('entity_type', 'node') ->propertyCondition('type', 'typeName') ->fieldCondition('field_name', 'tid', $TERM_ID) ->propertyOrderBy('title'); $nodes = $Query->execute(); |
Результатом будет массив вида:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Array ( [node] => Array ( [1747] => stdClass Object ( [nid] => 1747 [vid] => 7790 [type] => download ) [1748] => stdClass Object ( [nid] => 1748 [vid] => 7791 [type] => download ) ) ) |
Далее, обычно, следует обработка этого массива, вроде:
1 2 3 4 5 6 |
if (!empty($nodes['node'])) { foreach ($nodes['node'] as $node) { $node = node_load($node->nid); ... } } |