J'ai un type de contenu vidéo. J'exécute la requête suivante dans hook_cron
:
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->entityCondition('bundle', 'video');
$query->propertyCondition('status', 1);
$results = $query->execute();
Cela renvoie le nombre d'objet entité avec la propriété nid
, vid
et type
. Je veux utiliser cet objet pour trouver une valeur d'un champ particulier de la vidéo (disons la durée). Je ne veux pas utiliser node_load
, car je l'aurais fait en premier lieu au lieu d'utiliser la requête. Comment cela peut-il être fait?
Le module EntityFieldQuery Extra Fields pourrait résoudre votre problème.
La requête, comme illustré ci-dessous, renverra un objet qui contient l'ID d'entité, le type d'entité et un objet qui contient entity_type, entity_id, revision_id, bundle et le champ demandé. Votre code serait:
$query = new EntityFieldQueryExtraFields();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'video')
->addExtraField('field_duration', 'value', 'value')
->propertyCondition('status', 1);
$results = $query->execute();
J'utilise actuellement cette solution sur un site.
Il ne peut pas - un EntityFieldQuery
ne chargera que l'ID d'entité et les clés de l'ensemble.
Il n'y a pas d'autre choix que d'utiliser node_load_multiple()
(ou l'équivalent si vous utilisez un type d'entité différent).
$nodes = node_load_multiple(array_keys($results['node']));
Gardez à l'esprit que le paramètre $conditions
De node_load_multiple()
est déconseillé; en faveur de EntityFieldQuery
si je comprends bien.
Vous pouvez théoriquement sous-classer EntityFieldQuery
et remplacer la méthode execute()
pour renvoyer les entités entièrement chargées - mais vous devrez également étendre la classe afin qu'elle sache toujours quel type d'entité elle recherche; sinon, il ne saura pas quelle clé utiliser dans $results
.