Para obtener valores de entidades, hay dos formas:
- Use
field_get_items
y obtenga el valor de un campo - Use
entity_metadata_wrapper
y obtenga el valor de un campo
Aunque entity_metadata_wrapper
abstrae las diferencias de idioma, su API todavía es incómoda a veces, especialmente cuando se usa PHP 5.3. Por ejemplo, obtener el valor de un campo de texto largo generalmente sigue esta ruta:
$field = $wrapper->field->value();
print $field['safe_value'];
Afortunadamente, PHP 5.4 es compatible con esta sintaxis: print $wrapper->field->value()['safe_value'];
.
Pero mi pregunta está más preocupada por el rendimiento. ¿Cómo funcionan ambos? ¿Consultan la base de datos cada vez que solicitan un valor? ¿ entity_metadata_wrapper
Solicita todo a la vez? (Hacer field_get_item
más adecuado para recuperaciones de un solo valor).
No soy lo suficientemente valiente como para sumergirme profundamente en la fuente de Drupal.
field_get_items()
incurre en cero sobrecarga de la base de datos, así que creo que es un caso bastante abierto y cerrado :)
field_get_items()
incurre en gastos generales de base de datos cero? Tiene que obtener sus datos en alguna parte, ¿verdad?
entity_metadata_wrapper
funciona, en cuanto al rendimiento.
field_get_items()
para que la sobrecarga ya se haya incurrido ... es un poco una ruta estrangulada en D7 para ser honesto
field_view_field()
es para representar un campo. La función para obtener el valor de un campo es field_get_items () .