web-dev-qa-db-fra.com

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

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 ().

25
Torrance

node_load est juste un emballage sophistiqué pour entity_load.

C'est node_load appels node_load_multiple qui est 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 présente de nombreux avantages par rapport à 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 en tout, node_load est une commodité que vous devez toujours utiliser dans la mesure du possible, puis utilisez node_load_multiple pour les cas 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, ...);
33
googletorp

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 à l'avance le type d'entité, 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.

9
Berdir

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'il accepte des paramètres spécifiques au chargement d'un objet nœud, tels que $vid. La fonction appelle node_load_multiple() ; elle 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éconseillés. Ils sont supprimés lorsque Drupal 9 aura sa version stable).
De plus, dans Drupal 8 appels à ces fonctions doivent être modifiés, car dans Drupal 8:

5
kiamlaluno