Lequel dois-je utiliser et quand: node_load () ou entity_load ()?

24

Le titre dit tout.

Je comprends que entity_load fournit un moyen performant et efficace pour charger plusieurs nœuds tout en réduisant les requêtes de base de données, donc je suppose que dans ce cas, je devrais utiliser entity_load (). Mais quand je veux juste un nœud, lequel dois-je utiliser? Et node_load () sera-t-il déconseillé en d8 au profit de l'api entity_load () plus générique?

Je suppose que la même question vaut aussi pour le familier user_load ().

Torrance
la source
3
Ugh ... aurait dû lire le code un peu en premier. Node_load n'est qu'un wrapper avec quelques vérifications d'arguments pour node_load_multiple, qui est lui-même un wrapper pour entity_load. Les performances ne seront donc pas différentes non plus, sauf en appelant directement entity_load (), vous vous épargnerez peut-être quelques appels de fonction supplémentaires. Voir api.drupal.org/api/drupal/modules--node--node.module/function/… et api.drupal.org/api/drupal/modules--node--node.module/function/… .
Torrance le

Réponses:

33

node_loadest juste un emballage de fantaisie pour entity_load.

C'est des node_loadappels node_load_multiplequi sont un wrapper pour entity_load. Cela signifie qu'en termes de performances, il n'y a pas vraiment de différence, quelle fonction vous utilisez, sauf si vous devez charger un grand nombre de nœuds.

node_load a de nombreux avantages sur entity_load

  • C'est plus simple
  • Il augmente la lisibilité du code
  • il renvoie l'objet nœud au lieu d'un tableau avec le ou les objets nœud

Donc, dans l'ensemble, node_loadc'est une commodité que vous devez toujours utiliser dans la mesure du possible, puis recourir aux node_load_multiplecas où vous devez charger beaucoup plus de nœuds.

entity_load doit être utilisé pour charger des entités lorsque vous ne connaissez pas le type, ou le faire stocker dans une variable, auquel cas vous pouvez le faire

entity_load($type, ...);
googletorp
la source
1
après tout, node_load()c'est ce à quoi nous sommes habitués.
Sivaji
9

Utilisez node_load () lorsque vous avez un seul nœud à charger et node_load_multiple () lorsque vous en avez plusieurs. Utilisez entity_load () directement lorsque vous ne connaissez pas le type d'entité à l'avance, par exemple entity_load($type, array($id)).

Notez que entity_load () est nommé de manière incohérente, il devrait en fait être entity_load_multiple (), car il permet de charger plusieurs résultats et renvoie un tableau de résultats.

Berdir
la source
4

node_load()est la fonction qui existait avant l'introduction de l'API d'entité dans Drupal 7. La différence avec entity_load()est qu'elle accepte des paramètres spécifiques au chargement d'un objet nœud, tels que $vid. La fonction appelle node_load_multiple(); il est utile pour des raisons de compatibilité et parce qu'il nécessite moins de paramètres.

$node = node_load($nid);
$nodes = entity_load('node', array($nid));

Dans Drupal 8, node_load(), node_load_multiple()et entity_load()sont dépréciées. Ils sont supprimés lorsque Drupal 9 aura sa version stable).
De plus, dans Drupal 8, les appels à ces fonctions doivent être modifiés, car dans Drupal 8:

kiamlaluno
la source