Qual devo usar e quando: node_load () ou entity_load ()?

24

O título diz tudo.

Entendo que o entity_load fornece um meio eficiente e eficiente para carregar vários nós e ao mesmo tempo reduzir as consultas ao banco de dados, portanto presumo que, nesse caso, eu deveria usar o entity_load (). Mas quando eu apenas quero um nó, qual devo usar? E o node_load () será descontinuado no d8 em favor da API entity_load () mais genérica?

Eu acho que a mesma pergunta vale para o familiar user_load () também.

Torrance
fonte
3
Ugh ... deveria ter lido o código um pouco primeiro. Node_load é apenas um wrapper com algumas verificações de argumento para node_load_multiple, que é ele próprio um wrapper para entity_load. Portanto, o desempenho também não será diferente, exceto chamando entity_load () diretamente e você talvez economize algumas chamadas de função adicionais. Consulte api.drupal.org/api/drupal/modules--node--node.module/function/… e api.drupal.org/api/drupal/modules--node--node.module/function/… .
Torrance

Respostas:

32

node_loadé apenas um invólucro chique para entity_load.

Ou seja, node_loadchamadas node_load_multipleque são um invólucro entity_load. Isso significa que, em termos de desempenho, não há muita diferença, qual função você usa, a menos que você precise carregar muitos nós.

node_load tem muitas vantagens sobre entity_load

  • É mais simples
  • Aumenta a legibilidade do código
  • retorna o objeto do nó em vez de uma matriz com o (s) objeto (s) do nó

Portanto, node_loadé uma conveniência que você sempre deve usar sempre que possível e, em seguida, recorra a node_load_multiplecasos em que você precisa carregar muito mais nós.

entity_load deve ser usado para carregar entidades quando você não conhece o tipo ou o armazena em uma variável; nesse caso, você pode fazer

entity_load($type, ...);
googletorp
fonte
11
afinal node_load()é o que estamos acostumados.
Sivaji
9

Use node_load () quando tiver um único nó para carregar e node_load_multiple () quando tiver mais deles. Use entity_load () diretamente quando não souber o tipo de entidade com antecedência, por exemplo entity_load($type, array($id)).

Observe que entity_load () é nomeado de forma inconsistente; na verdade, deve ser entity_load_multiple (), pois permite carregar vários resultados e retorna uma matriz de resultados.

Berdir
fonte
4

node_load()é a função que existia antes da API da entidade ser introduzida no Drupal 7. A diferença entity_load()é que ela aceita parâmetros específicos para o carregamento de um objeto de nó, como $vid. A função chama node_load_multiple(); é útil por motivos de compatibilidade e porque requer menos parâmetros.

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

Em Drupal 8, node_load(), node_load_multiple()e entity_load()são preteridos. Eles são removidos quando o Drupal 9 tiver seu lançamento estável).
Além disso, no Drupal 8, as chamadas para essas funções precisam ser alteradas, pois no Drupal 8:

kiamlaluno
fonte