Pour obtenir des valeurs à partir d'entités, il existe deux façons:
- Utilisez
field_get_items
et obtenez la valeur d'un champ - Utilisez
entity_metadata_wrapper
et obtenez la valeur d'un champ
Bien qu'il entity_metadata_wrapper
résume les différences de langage, son API est parfois maladroite, surtout lors de l'utilisation de PHP 5.3. Par exemple, obtenir la valeur d'un long champ de texte suit généralement cette voie:
$field = $wrapper->field->value();
print $field['safe_value'];
Heureusement, PHP 5.4 prend en charge cette syntaxe: print $wrapper->field->value()['safe_value'];
.
Mais ma question concerne plus les performances. Comment fonctionnent-ils tous les deux? Interrogent-ils la base de données chaque fois qu'ils demandent une valeur? Est-ce que entity_metadata_wrapper
demande tout à la fois? (Rendre field_get_item
plus adapté aux extractions à valeur unique.)
Je ne suis pas assez courageux pour plonger profondément dans la source Drupal.
field_get_items()
n'encourt aucun frais généraux de base de données, donc je pense que c'est un cas assez ouvert et fermé :)
field_get_items()
surcharge de la base de données soit nulle? Il doit obtenir ses données quelque part, non?
entity_metadata_wrapper
fonctionne, en termes de performances.
field_get_items()
donc le surcoût a déjà été encouru ... c'est un peu une route étranglée en D7 pour être honnête
field_view_field()
sert au rendu d'un champ. La fonction pour obtenir la valeur d'un champ est field_get_items () .