Tengo un objeto de nodo con un campo de imagen llamado field_image. Cuando lo hago
$node
  ->get('field_image')
  ->first()
  ->getValue()Obtengo una matriz con algunas propiedades en lugar del objeto de entidad. La matriz se ve así:
'target_id' => string '8' (length=1)
'alt' => string '' (length=0)
'title' => string '' (length=0)
'width' => string '587' (length=3)
'height' => string '458' (length=3)
'_loaded' => boolean true
  '_accessCacheability' => 
    object(Drupal\Core\Cache\CacheableMetadata)[1092]
      protected 'cacheContexts' => 
        array (size=0)
          ...
      protected 'cacheTags' => 
        array (size=0)
          ...
      protected 'cacheMaxAge' => int -1¿Tengo que cargar manualmente la entidad de archivo usando target_ido hay una manera de obtener automáticamente el objeto de entidad referenciado de la instancia de Drupal\image\Plugin\Field\FieldType\ImageItem?
¿Por qué la entidad referenciada no es accesible a través de getter? Podría tener una carga lenta si no está disponible de inmediato.

PHP Fatal error: Call to undefined method Drupal\image\Plugin\Field\FieldType\ImageItem::getTarget(). Sin embargo$node->get('imagefield')->referencedEntities()funciona gracias al hecho de que$node->get('imagefield')devuelve la instancia de laEntityReferenceFieldItemListcual implementa elreferencedEntities()método. Por lo tanto, su solución es solo parcial: funciona para listas pero no para campos individuales.Respuestas:
El camino a la entidad referenciada es muy largo:
Por supuesto, todavía se puede obtener a través de una llamada de línea, pero aún así, es engorroso y me pregunto por qué
EntityReferenceItemno proporciona un método que devuelva el objeto de entidad de referencia.También vale la pena señalar que es bastante fácil obtener una matriz de todas las entidades referenciadas:
Funciona porque para los campos de referencia de entidad
$node->get($field)devuelve una instancia de laEntityReferenceFieldItemListcual implementa elreferencedEntities()método.fuente
Puedes usar:
$node->field_image->entitysi quieres el primer valor
fuente
$node->get('field_image')->entitydevuelve laFileentidad. Sin embargo,$node->get('field_image')->getEntity()devuelve laNodeentidad principal ! Entiendo que los métodos mágicos pueden ser utilizables, pero son PITA en proyectos más grandes. ¿Por qué molestarse en escribir interfaces y código oo si se nos anima a usar magia de todos modos? Escribiste que es bastante fácil de recordar una vez que lo hiciste , no estoy de acuerdo. Una vez que comience a hacer esto, desarrollará un hábito realmente malo que hará que su código sea menos legible y menos mantenible.Lo que funcionó para mí fue:
Las otras respuestas no produjeron la matriz de campos de entidad que esperaba
fuente
Para saber cómo obtener una entidad de un campo referenciado. Estoy de acuerdo con @SiliconMind sobre entidades referenciadas, devuelve una matriz de objetos de entidad con clave por deltas de elementos de campo.
Así de simple:
$node->get('field_name')->referencedEntities();EntityReferenceFieldItemList :: referencedEntities
fuente