Để nhận giá trị từ các thực thể, có hai cách:
- Sử dụng
field_get_items
và nhận giá trị của một trường - Sử dụng
entity_metadata_wrapper
và nhận giá trị của một trường
Mặc dù entity_metadata_wrapper
trừu tượng hóa sự khác biệt ngôn ngữ, đôi khi API của nó vẫn còn lúng túng, đặc biệt là khi sử dụng PHP 5.3. Ví dụ: nhận giá trị của trường văn bản dài thường đi theo tuyến đường này:
$field = $wrapper->field->value();
print $field['safe_value'];
May mắn thay, PHP 5.4 hỗ trợ cú pháp này : print $wrapper->field->value()['safe_value'];
.
Nhưng câu hỏi của tôi quan tâm nhiều hơn về hiệu suất. Làm thế nào để cả hai làm việc? Họ có truy vấn cơ sở dữ liệu mỗi khi họ yêu cầu một giá trị không? Có entity_metadata_wrapper
yêu cầu tất cả mọi thứ cùng một lúc? (Làm cho field_get_item
phù hợp hơn với truy xuất giá trị đơn.)
Tôi không đủ can đảm để đi sâu vào nguồn Drupal.
field_get_items()
không phát sinh chi phí cơ sở dữ liệu nên tôi nghĩ đó là một trường hợp khá mở và đóng :)
field_get_items()
phát sinh cơ sở dữ liệu không? Nó phải lấy dữ liệu của nó ở đâu đó, phải không?
entity_metadata_wrapper
hoạt động, hiệu suất khôn ngoan.
field_get_items()
để chi phí phát sinh đã bị phát sinh ... đó là một chút tuyến đường bị bóp nghẹt trong D7 phải trung thực
field_view_field()
là để hiển thị một trường. Hàm để lấy giá trị của một trường là field_get_items () .