要从实体获取值,有两种方法:
- 使用
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()
导致零数据库开销,所以我认为这是一个很容易被关闭的情况:)
field_get_items()
导致零数据库开销?它必须在某个地方获取数据,对吗?
entity_metadata_wrapper
性能如何运作。
field_get_items()
因此已经产生了开销……说实话,这在D7中有点儿被绞死了
field_view_field()
用于渲染字段。获取字段值的函数是field_get_items()。