Tôi nên sử dụng cái nào và khi nào: node_load () hoặc entity_load ()?


24

Tiêu đề nói lên tất cả.

Tôi hiểu rằng entity_load cung cấp một phương tiện hiệu quả và hiệu quả để tải nhiều nút trong khi giảm các truy vấn cơ sở dữ liệu, vì vậy tôi cho rằng trong trường hợp đó tôi nên sử dụng entity_load (). Nhưng khi tôi chỉ muốn một nút, tôi nên sử dụng nút nào? Và liệu node_load () có bị phản đối trong d8 có lợi cho api entity_load () chung chung hơn không?

Tôi đoán câu hỏi tương tự cũng xảy ra với user_load () quen thuộc.


3
Ugh ... nên đọc mã một chút trước. Node_load chỉ là một trình bao bọc với một vài đối số kiểm tra cho node_load_multipl, bản thân nó là một trình bao bọc cho entity_load. Vì vậy, hiệu suất sẽ không khác nhau, ngoại trừ bằng cách gọi trực tiếp thực thể_load (), bạn có thể tiết kiệm cho mình một vài cuộc gọi chức năng bổ sung. Xem api.drupal.org/api/drupal/modules--node--node.module/feft/ và và api.drupal.org/api/drupal/modules--node--node.module/feft/ .
Torrance

Câu trả lời:


32

node_loadchỉ là một gói bọc ưa thích cho entity_load.

Đó là node_loadcác cuộc gọi node_load_multiplelà một trình bao bọc cho entity_load. Điều này có nghĩa là hiệu suất khôn ngoan thực sự không có nhiều sự khác biệt, chức năng bạn sử dụng, trừ khi bạn phải tải rất nhiều nút.

node_load có nhiều lợi thế hơn entity_load

  • Nó đơn giản hơn
  • Nó làm tăng khả năng đọc mã
  • nó trả về đối tượng nút thay vì một mảng với (các) đối tượng nút

Vì vậy, trong tất cả, node_loadlà một tiện lợi mà bạn luôn nên sử dụng bất cứ khi nào có thể, sau đó sử dụng node_load_multiplecho các trường hợp bạn cần tải thêm nhiều nút.

entity_load nên được sử dụng để tải các thực thể khi bạn không biết loại hoặc lưu trữ nó trong một biến, trong trường hợp đó bạn có thể làm

entity_load($type, ...);

1
sau tất cả node_load()là những gì chúng ta đã quen
Sivaji

9

Sử dụng node_load () khi bạn có một nút duy nhất để tải và node_load_mult Môn () khi bạn có nhiều nút hơn. Ví dụ, sử dụng thực thể_load () khi bạn không biết trước loại thực thể entity_load($type, array($id)).

Lưu ý rằng entity_load () được đặt tên không nhất quán, nó thực sự phải là entity_load_mult Môn (), vì nó cho phép tải nhiều kết quả và trả về một mảng kết quả.


4

node_load()là hàm tồn tại trước khi API thực thể được giới thiệu trong Drupal 7. Điểm khác biệt entity_load()là nó chấp nhận các tham số dành riêng cho việc tải một đối tượng nút, chẳng hạn như $vid. Hàm gọi node_load_multiple(); nó rất hữu ích cho lý do tương thích và vì nó yêu cầu ít tham số hơn.

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

Trong Drupal 8 node_load(), node_load_multiple()entity_load()không được dùng nữa. Điều này họ được gỡ bỏ khi Drupal 9 sẽ có bản phát hành ổn định).
Hơn nữa, trong Drupal 8, các cuộc gọi đến các chức năng đó cần phải được thay đổi, vì trong Drupal 8:

  • node_load()không sử dụng $vidlàm tham số thứ hai
  • entity_load()node_load_multiple()không sử dụng $conditionlàm tham số thứ hai (và nó được đánh dấu là không dùng nữa trong Drupal 7)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.