Którego należy użyć i kiedy: node_load () lub entity_load ()?

24

Tytuł mówi wszystko.

Rozumiem, że entity_load zapewnia wydajne i wydajne środki do ładowania wielu węzłów przy jednoczesnym zmniejszeniu liczby zapytań do bazy danych, więc zakładam, że w takim przypadku powinienem użyć encji_load (). Ale kiedy chcę tylko jednego węzła, którego powinienem użyć? I czy node_load () będzie przestarzałe w d8 na korzyść bardziej ogólnego interfejsu API entity_load ()?

Wydaje mi się, że to samo pytanie dotyczy również znanego user_load ().

Torrance
źródło
3
Ugh ... powinienem najpierw przeczytać kod. Node_load jest tylko opakowaniem z kilkoma argumentami, które sprawdzają, czy wartość node_load_multiple jest sama w sobie opakowaniem dla instance_load. Zatem wydajność nie będzie inna dla żadnego z tych przypadków, z wyjątkiem bezpośredniego wywołania encji_load (), być może zaoszczędzisz sobie kilka dodatkowych wywołań funkcji. Zobacz api.drupal.org/api/drupal/modules--node--node.module/function/… i api.drupal.org/api/drupal/modules--node--node.module/function/… .
Torrance

Odpowiedzi:

32

node_loadto tylko fantazyjne opakowanie entity_load.

To znaczy node_loadpołączenia, node_load_multiplektóre są opakowaniem entity_load. Oznacza to, że pod względem wydajności nie ma tak naprawdę dużej różnicy, z której funkcji korzystasz, chyba że musisz załadować wiele węzłów.

node_load ma wiele zalet entity_load

  • To jest prostsze
  • Zwiększa czytelność kodu
  • zwraca obiekt węzła zamiast tablicy z obiektami węzła

Podsumowując, node_loadjest to wygoda, z której zawsze powinieneś korzystać, gdy tylko jest to możliwe, a następnie uciekać się node_load_multipledo przypadków, w których musisz załadować więcej węzłów.

entity_load należy stosować do ładowania encji, gdy nie znasz typu lub przechowujesz go w zmiennej, w którym to przypadku możesz to zrobić

entity_load($type, ...);
googletorp
źródło
1
w końcu node_load()to do czego jesteśmy przyzwyczajeni.
Sivaji
9

Użyj node_load (), gdy masz jeden węzeł do załadowania, i node_load_multiple (), gdy masz ich więcej. Skorzystaj bezpośrednio z entity_load (), jeśli na przykład nie znasz typu encji entity_load($type, array($id)).

Zauważ, że entity_load () ma niekonsekwentną nazwę, tak naprawdę powinna to być entity_load_multiple (), ponieważ pozwala załadować wiele wyników i zwraca tablicę wyników.

Berdir
źródło
4

node_load()jest funkcją, która istniała przed wprowadzeniem API encji w Drupal 7. Różnica entity_load()polega na tym, że akceptuje ona parametry specyficzne dla ładowania obiektu węzła, takie jak $vid. Wywołania funkcji node_load_multiple(); jest to pomocne ze względu na kompatybilność i ponieważ wymaga mniej parametrów.

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

W Drupal 8 node_load(), node_load_multiple()i entity_load()są przestarzałe. Są one usuwane, gdy Drupal 9 będzie miał stabilną wersję).
Ponadto w Drupal 8 należy zmienić wywołania tych funkcji, ponieważ w Drupal 8:

kiamlaluno
źródło