Drupal 7 имеет очень многообещающую ORM-подобную систему запросов с EntityFieldQuery.
В настоящее время я понимаю, как сделать выбор узлов, но результат не содержит какой-либо конкретной информации, например, полей, которые я ищу.
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'event')
->propertyCondition('status', 1)
->fieldCondition('field_date', 'value', array('2011-03-01', '2011-03-31'), 'BETWEEN')
->fieldOrderBy('field_date', 'value', 'ASC')
->execute();
Таким образом, нам нужно загрузить целые данные узлов, если мы хотим получить только значения одного поля, например, 'field_date' в текущем примере.
$nodes = entity_load('node', array_keys($entities['node']));
Если есть способ получить значение полей, вместо этого загрузить полные данные всех узлов, так как это вызывает некоторую перегрузку памяти.
$nodesFieldDates = ???
Я нашел ответ на это! Модуль Apache Solr расширяет класс EntityFieldQuery , чтобы это произошло. Он добавляет новый метод с именем addExtraField.
Если у вас не установлен Apache Solr, просто скопируйте код для расширения этого класса.
источник
Вам не нужно ничего переопределять или расширять класс. Вам просто нужно использовать,
field_attach_load()
чтобы прикрепить поле, которое вы хотите к результатам изEntityFieldQuery
класса.См. Также Загрузка только одного поля из сущности или узла в Drupal 7 , хорошая статья с примерами того, как это сделать.
источник
Любой, кто все еще хочет получить Fields от EFQ, взглянет на модуль EFQ Extra Fields .
источник