Pour obtenir des valeurs à partir d'entités, il existe deux façons:
- Utilisez
field_get_itemset obtenez la valeur d'un champ - Utilisez
entity_metadata_wrapperet obtenez la valeur d'un champ
Bien qu'il entity_metadata_wrapperré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_wrapperdemande tout à la fois? (Rendre field_get_itemplus 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_wrapperfonctionne, 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 () .