Drupal 7 tiene un sistema de consultas ORM muy prometedor con EntityFieldQuery.
Actualmente, entiendo cómo hacer una selección de nodos, pero el resultado no contiene ninguna información específica, como fileds, que estoy buscando.
$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();
Por lo tanto, necesitamos cargar datos completos de nodos, si queremos obtener solo valores de un campo, por ejemplo 'field_date' en el ejemplo actual.
$nodes = entity_load('node', array_keys($entities['node']));
Si hay una manera de obtener el valor de los campos, en lugar de cargar datos completos de todos los nodos, ya que provoca una sobrecarga de memoria.
$nodesFieldDates = ???
¡Encontré la respuesta para esto! El módulo Apache Solr extiende la clase EntityFieldQuery para que esto suceda. Agrega un nuevo método llamado addExtraField.
Si no tiene instalado Apache Solr, simplemente copie el código para extender esa clase.
fuente
No necesita anular nada ni extender la clase. Solo necesita usar
field_attach_load()
para adjuntar el campo que desea a los resultados de laEntityFieldQuery
clase.Consulte también Carga de un solo campo desde una entidad o nodo en Drupal 7 , un buen artículo con ejemplos sobre cómo hacerlo.
fuente
Cualquiera que todavía quiera obtener Campos de un EFQ eche un vistazo al módulo Campos adicionales de EFQ .
fuente