Vous pouvez utiliser la classe EntityFieldQuery pour interroger la base de données et extraire les résultats sous forme de liste similaire à node_load_multiple()
.
Ceci peut être réalisé en créant une classe, en appliquant les conditions et en exécutant la requête, par exemple:
<?php
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'TYPE') // E.g. node, entityform, taxonomy_term
->entityCondition('bundle', 'BUNDLE')
->fieldCondition('field_foo', 'value', 'STRING')
->range(0,10);
$result = $query->execute();
?>
Cela générera un tableau tel que:
array (
'TYPE' =>
array (
123 =>
stdClass::__set_state(array(
'nid' => '123', // Can be also tid when loading terms.
'key' => 'value',
)),
456 =>
stdClass::__set_state(array(
'nid' => '456',
'key' => 'value',
)),
),
)
Pour récupérer l'ID du tableau de résultat, vous pouvez utiliser: current(current($result))->tid
.
Voici un exemple plus avancé:
<?php
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'article')
->propertyCondition('status', NODE_PUBLISHED)
->fieldCondition('field_news_types', 'value', 'spotlight', '=')
->fieldCondition('field_photo', 'fid', 'NULL', '!=')
->fieldCondition('field_faculty_tag', 'tid', $value)
->fieldCondition('field_news_publishdate', 'value', $year . '%', 'like')
->fieldOrderBy('field_photo', 'fid', 'DESC')
->range(0, 10)
->addMetaData('account', user_load(1)); // Run the query as user 1.
$result = $query->execute();
if (isset($result['node'])) {
$news_items_nids = array_keys($result['node']);
$news_items = entity_load('node', $news_items_nids);
}
?>
Voir: Comment utiliser EntityFieldQuery sur Drupal.org pour plus d'explications.