我应该在何时以及何时使用:node_load()或entity_load()?


24

标题说明了一切。

我知道Entity_load提供了一种高效且高效的方式来加载多个节点,同时减少了数据库查询,因此我认为在这种情况下,我应该使用entity_load()。但是,当我只想要一个节点时,应该使用哪个节点?会否在d8中弃用node_load(),转而使用更通用的Entity_load()API?

我猜对于熟悉的user_load()也有同样的问题。


3
嗯...应该先读一下代码。Node_load只是一个包装,它对node_load_multiple进行了一些参数检查,而node_load_multiple本身就是entity_load的包装。因此,两者的性能都不会有所不同,除了直接调用entity_load()可能会为您节省一些额外的函数调用。请参阅api.drupal.org/api/drupal/modules--node--node.module/function/…api.drupal.org/api/drupal/modules--node--node.module/function/…
托伦斯

Answers:


32

node_load只是一个花哨的包装entity_load

那就是node_loadcall node_load_multiple,它是的包装entity_load。这意味着在性能方面,使用哪种功能实际上没有太大区别,除非必须加载大量节点。

node_load 相对于 entity_load

  • 更简单
  • 它提高了代码的可读性
  • 它返回节点对象,而不是包含节点对象的数组

因此,总的来说,这node_load是一种便利,您始终应尽可能使用它,然后node_load_multiple在需要加载更多节点的情况下求助。

entity_load 当您不知道类型或将其存储在变量中时,应该用于加载实体,在这种情况下,您可以

entity_load($type, ...);

1
毕竟node_load()我们已经习惯了。
西瓦吉

9

如果要加载单个节点,请使用node_load();如果要加载更多节点,请使用node_load_multiple()。如果您事先不知道实体类型,请直接使用entity_load()entity_load($type, array($id))

请注意,entity_load()的名称不一致,它实际上应为entity_load_multiple(),因为它允许加载多个结果并返回结果数组。


4

node_load()是在Drupal 7中引入实体API之前存在的功能。与之间的区别entity_load()是,它接受特定于加载节点对象的参数,例如$vid。函数调用node_load_multiple(); 出于兼容性原因,它很有用,因为它需要较少的参数。

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

在Drupal 8中node_load()node_load_multiple()entity_load()已弃用。当Drupal 9稳定发布时,将删除它们。
此外,在Drupal 8中,需要更改对这些函数的调用,因为在Drupal 8中:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.