¿Qué debo usar y cuándo: node_load () o entity_load ()?

24

El título lo dice todo.

Entiendo que entity_load proporciona un medio eficiente y eficiente para cargar múltiples nodos al tiempo que reduce las consultas de la base de datos, por lo que supongo que en ese caso debería estar usando entity_load (). Pero cuando solo quiero un nodo, ¿qué debo usar? ¿Y node_load () quedará en desuso en d8 a favor de la API más genérica entity_load ()?

Supongo que la misma pregunta se aplica también a la familiar user_load ().

Torrance
fuente
3
Ugh ... debería haber leído el código un poco primero. Node_load es solo un contenedor con algunas comprobaciones de argumentos para node_load_multiple, que es en sí mismo un contenedor para entity_load. Por lo tanto, el rendimiento no será diferente para ninguno, excepto al llamar a entity_load () directamente, tal vez se ahorre algunas llamadas de función adicionales. Ver api.drupal.org/api/drupal/modules--node--node.module/function/… y api.drupal.org/api/drupal/modules--node--node.module/function/… .
Torrance

Respuestas:

32

node_loades solo un envoltorio elegante para entity_load.

Eso es node_loadllamadas, node_load_multipleque es un contenedor para entity_load. Esto significa que, en cuanto al rendimiento, no hay mucha diferencia, qué función utiliza, a menos que tenga que cargar muchos nodos.

node_load tiene muchas ventajas sobre entity_load

  • Es mas simple
  • Aumenta la legibilidad del código
  • devuelve el objeto de nodo en lugar de una matriz con los objetos de nodo

En resumen, node_loades una conveniencia que siempre debe usar siempre que sea posible, y luego recurrir a los node_load_multiplecasos en los que necesite cargar muchos más nodos.

entity_load debe usarse para cargar entidades cuando no conoce el tipo, o lo tiene almacenado en una variable, en cuyo caso puede hacerlo

entity_load($type, ...);
googletorp
fuente
1
después de todo node_load()es a lo que estamos acostumbrados.
Sivaji
9

Use node_load () cuando tenga un solo nodo para cargar y node_load_multiple () cuando tenga más de ellos. Use entity_load () directamente cuando no conozca el tipo de entidad de antemano, por ejemplo entity_load($type, array($id)).

Tenga en cuenta que entity_load () tiene un nombre inconsistente, en realidad debería ser entity_load_multiple (), ya que permite cargar múltiples resultados y devuelve una matriz de resultados.

Berdir
fuente
4

node_load()es la función que existía antes de que la entidad API se introdujera en Drupal 7. La diferencia con entity_load()es que acepta parámetros que son específicos para cargar un objeto de nodo, como $vid. La función llama node_load_multiple(); es útil por razones de compatibilidad y porque requiere menos parámetros.

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

En Drupal 8 node_load(), node_load_multiple()y entity_load()están en desuso. Esto se eliminan cuando Drupal 9 tendrá su versión estable).
Además, en Drupal 8 las llamadas a esas funciones deben cambiarse, ya que en Drupal 8:

kiamlaluno
fuente