Чтобы получить значения от сущностей, есть два способа:
- Используйте
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 () .