Drupal 7 a un système de requêtes de type ORM très prometteur avec EntityFieldQuery.
Actuellement, je comprends comment faire la sélection des nœuds, mais le résultat ne contient aucune information spécifique, comme les fichiers, que je recherche.
$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();
Nous devons donc charger des données entières de nœuds, si nous voulons obtenir uniquement les valeurs d'un champ, par exemple 'field_date' dans l'exemple actuel.
$nodes = entity_load('node', array_keys($entities['node']));
S'il existe un moyen d'obtenir la valeur des champs, chargez plutôt les données complètes de tous les nœuds, car cela provoque une surcharge de mémoire.
$nodesFieldDates = ???
J'ai trouvé la réponse à cela! Le module Apache Solr étend la classe EntityFieldQuery pour y arriver. Il ajoute une nouvelle méthode appelée addExtraField.
Si vous n'avez pas installé Apache Solr, copiez simplement le code pour étendre cette classe.
la source
Vous n'avez pas besoin de remplacer quoi que ce soit ou d'étendre la classe. Vous avez juste besoin d'utiliser
field_attach_load()
pour attacher le champ souhaité aux résultats de laEntityFieldQuery
classe.Voir aussi Chargement d'un seul champ à partir d'une entité ou d'un nœud dans Drupal 7 , un bon article avec des exemples sur la façon de le faire.
la source
Quiconque souhaite toujours obtenir des champs à partir d'un EFQ jetez un œil aux champs supplémentaires EFQ module .
la source