ฉันควรใช้แบบไหนและเมื่อใด: node_load () หรือ entity_load ()


24

ชื่อกล่าวมันทั้งหมด

ฉันเข้าใจว่า entity_load จัดเตรียมวิธีการที่มีประสิทธิภาพและมีประสิทธิภาพในการโหลดหลายโหนดในขณะที่ลดการสืบค้นฐานข้อมูลดังนั้นฉันจึงสันนิษฐานว่าในกรณีนั้นฉันควรใช้ entity_load () แต่เมื่อฉันต้องการเพียงหนึ่งโหนดที่ฉันควรใช้? และ node_load () จะเลิกใช้ใน d8 เพื่อสนับสนุนเอนทิตีทั่วไปมากขึ้น () API?

ฉันเดาคำถามเดียวกันสำหรับ user_load ที่คุ้นเคย () เช่นกัน


3
อืม ... ควรอ่านรหัสก่อนนะ Node_load เป็นเพียง wrapper ที่มีการตรวจสอบอาร์กิวเมนต์น้อย ๆ สำหรับ node_load_multiple ซึ่งเป็น wrapper สำหรับ entity_load ดังนั้นประสิทธิภาพจะไม่แตกต่างกันเช่นกันยกเว้นการเรียกเอนทิตี้ของโหลด () โดยตรงคุณอาจช่วยตัวเองฟังก์ชั่นเพิ่มเติมบางอย่าง ดูapi.drupal.org/api/drupal/modules--node--node.module/function/...และapi.drupal.org/api/drupal/modules--node--node.module/function/...
Torrance

คำตอบ:


32

node_loadentity_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()คือสิ่งที่เราคุ้นเคย
Sivaji

9

ใช้ node_load () เมื่อคุณมีโหนดเดียวเพื่อโหลดและ node_load_multiple () เมื่อคุณมีมากกว่านั้น ใช้ entity_load () entity_load($type, array($id))โดยตรงเมื่อคุณไม่ทราบชนิดเอนทิตีล่วงหน้าเช่น

โปรดทราบว่า entity_load () มีชื่อที่ไม่สอดคล้องกันจริง ๆ แล้วควรเป็น entity_load_multiple () เนื่องจากอนุญาตให้โหลดผลลัพธ์หลายรายการและส่งกลับอาร์เรย์ของผลลัพธ์


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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.