ในการรับค่าจากเอนทิตีมีสองวิธี:
- ใช้
field_get_items
และรับค่าของเขตข้อมูล - ใช้
entity_metadata_wrapper
และรับค่าของเขตข้อมูล
แม้ว่าจะentity_metadata_wrapper
มีความแตกต่างทางด้านภาษาอยู่บ้าง แต่บางครั้ง API ก็ยังคงไม่แน่นอนโดยเฉพาะอย่างยิ่งเมื่อใช้ PHP 5.3 ตัวอย่างเช่นการรับค่าของฟิลด์ข้อความแบบยาวมักจะเป็นเส้นทางนี้:
$field = $wrapper->field->value();
print $field['safe_value'];
โชคดี, PHP 5.4 print $wrapper->field->value()['safe_value'];
สนับสนุนรูปแบบนี้:
แต่คำถามของฉันมีความกังวลมากขึ้นเกี่ยวกับประสิทธิภาพ พวกเขาทั้งสองทำงานอย่างไร พวกเขาสอบถามฐานข้อมูลทุกครั้งที่ขอค่าหรือไม่ ไม่entity_metadata_wrapper
ขอให้ทุกอย่างในครั้งเดียว? (การทำให้field_get_item
เหมาะกับการดึงข้อมูลค่าเดียว)
ฉันไม่กล้าพอที่จะดำดิ่งลงสู่แหล่ง Drupal
field_get_items()
incurs ศูนย์ค่าใช้จ่ายในฐานข้อมูลดังนั้นฉันคิดว่านั่นเป็นกรณีที่สวยเปิดและปิด :)
field_get_items()
เกิดศูนย์ค่าใช้จ่ายฐานข้อมูล? มันต้องได้รับข้อมูลที่ไหนสักแห่งใช่ไหม?
entity_metadata_wrapper
ทำงานประสิทธิภาพที่ชาญฉลาด
field_get_items()
จนเต็มแล้วดังนั้นค่าโสหุ้ยก็เกิดขึ้น ... มันเป็นเส้นทางที่แปลกประหลาดใน D7 ที่จะซื่อสัตย์
field_view_field()
สำหรับการเรนเดอร์ฟิลด์ ฟังก์ชั่นที่จะได้รับค่าของเขตข้อมูลเป็นfield_get_items ()