Что я должен использовать и когда: node_load () или entity_load ()?

24

Название говорит обо всем.

Я понимаю, что entity_load предоставляет эффективные и эффективные средства для загрузки нескольких узлов при одновременном сокращении запросов к базе данных, поэтому я предполагаю, что в этом случае мне следует использовать entity_load (). Но когда я просто хочу один узел, который я должен использовать? И будет ли в d8 функция node_load () устарела в пользу более общего API-интерфейса entity_load ()?

Я думаю, тот же вопрос касается и знакомой user_load ().

Торранс
источник
3
Тьфу ... должен был сначала прочитать код немного. Node_load - это просто оболочка с несколькими проверками аргументов для 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/… .
Торранс

Ответы:

33

node_loadэто просто модная обертка для entity_load.

Это node_loadзвонки, node_load_multipleкоторые являются оберткой для entity_load. Это означает, что с точки зрения производительности нет особой разницы, какую функцию вы используете, если вам не нужно загружать много узлов.

node_load имеет много преимуществ перед entity_load

  • Это проще
  • Это повышает читаемость кода
  • он возвращает объект узла вместо массива с объектом (ами) узла

В общем, node_loadудобство, которое вы всегда должны использовать, когда это возможно, а затем прибегать к node_load_multipleслучаям, когда вам нужно загрузить гораздо больше узлов.

entity_load следует использовать для загрузки сущностей, когда вы не знаете тип или храните его в переменной, и в этом случае вы можете сделать

entity_load($type, ...);
googletorp
источник
1
В конце концов node_load()это то, к чему мы привыкли.
Шиваджи
9

Используйте node_load (), когда у вас есть один узел для загрузки, и node_load_multiple (), когда у вас их больше. Например, используйте entity_load (), если вы заранее не знаете тип объекта entity_load($type, array($id)).

Обратите внимание, что entity_load () имеет непоследовательное имя, на самом деле это должен быть entity_load_multiple (), так как он позволяет загружать несколько результатов и возвращает массив результатов.

Berdir
источник
4

node_load()является функцией, существовавшей до того, как API-интерфейс сущностей был представлен в Drupal 7. Разница в 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:

  • node_load()не использует в $vidкачестве второго параметра
  • entity_load()и node_load_multiple()не используйте в $conditionкачестве второго параметра (и он был помечен как устаревший уже в Drupal 7)
киамалуно
источник