O Drupal 7 possui um sistema de consultas muito promissor, semelhante ao ORM, com o EntityFieldQuery.
Atualmente, eu entendo como fazer a seleção de nós, mas o resultado não contém nenhuma informação específica, como os arquivados, que estou procurando.
$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();
Portanto, precisamos carregar dados inteiros de nós, se quisermos obter apenas valores de um campo, por exemplo 'data_campo' no exemplo atual.
$nodes = entity_load('node', array_keys($entities['node']));
Se houver uma maneira de obter o valor dos campos, em vez disso, carregar dados completos de todos os nós, pois isso provoca uma sobrecarga de memória.
$nodesFieldDates = ???
Eu encontrei a resposta para isso! O módulo Apache Solr estende a classe EntityFieldQuery para que isso aconteça. Ele adiciona um novo método chamado addExtraField.
Se você não possui o Apache Solr instalado, copie o código para estender essa classe.
fonte
Você não precisa substituir nada ou estender a classe. Você só precisa usar
field_attach_load()
para anexar o campo que deseja aos resultados daEntityFieldQuery
classe.Consulte também Carregando apenas um campo de uma entidade ou nó no Drupal 7 , um bom artigo com exemplos de como fazê-lo.
fonte
Quem ainda deseja obter campos de um EFQ, consulte o módulo EFQ Extra Fields .
fonte