Що я повинен використовувати та коли: node_load () або entit_load ()?


24

Назва говорить все це.

Я розумію, що entit_load забезпечує ефективний та ефективний засіб для завантаження декількох вузлів, зменшуючи запити до бази даних, тому я припускаю, що в цьому випадку я повинен використовувати object_load (). Але коли я просто хочу один вузол, який я повинен використовувати? І чи буде застаріле node_load () застаріле у d8 на користь більш загального api-суті_load ()?

Я думаю, те саме питання стосується і знайомого user_load ().


3
Фу ... мав би спочатку трохи прочитати код. Node_load - це лише обгортка з кількома перевірками аргументів на node_load_multiple, яка сама по собі є обгорткою для entit_load. Таким чином, продуктивність не відрізнятиметься для будь-якого, за винятком випадків, зателефонувавши entit_load () безпосередньо, ви, можливо, заощадите кілька додаткових викликів функцій. Див. Api.drupal.org/api/drupal/modules--node--node.module/function/… та api.drupal.org/api/drupal/modules--node--node.module/function/… .
Торранс

Відповіді:


32

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, ...);

1
врешті-решт node_load()це те, до чого ми звикли.
Сіваджі

9

Використовуйте node_load (), коли у вас є один вузол для завантаження, і node_load_multiple (), коли у вас їх більше. Використовуйте entit_load () безпосередньо тоді, коли ви не знаєте заздалегідь тип сутності entity_load($type, array($id)).

Зауважте, що сукупність_імен () називається непослідовно, вона фактично повинна бути сутністю_завантажувача (), оскільки дозволяє завантажувати кілька результатів і повертає масив результатів.


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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.