¿Cómo cargar la entidad de párrafo en el objeto de nodo?

12

Estoy usando párrafos en mi tipo de contenido. Creé un tipo de párrafo y agregué contenido. Ahora quiero cargar los párrafos en a foreach. Pero no aparece nada. $parasesta vacio:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();
Pankaj Yogi
fuente
Dijiste $ paras mostrando en blanco. pero no mostraste cómo imprimiste su valor. ¿Es un NULLvalor, una cadena vacía o una matriz vacía? Como ya comentaste que ya hice esto, pero tu respuesta es la correcta , que muestra un código completamente diferente, tu pregunta se confunde un poco y no está claro lo que no puedes lograr.
kiamlaluno
Esta pregunta se hizo cuando soy muy nuevo en drupal 8 haciendo tareas para aprender. Creo que hago un error en el proceso para que se muestre en blanco. Pero cuando hago lo mismo ahora funciona bien. Marque aquí una demostración ejecute el mismo código. Acabo de crear esto para usted, d2log.ply.st/devel/php nombre de usuario :: contraseña de administrador :: admin
Pankaj Yogi

Respuestas:

23
$paragraph = $node->field_paragraph->getValue();
// Loop through the result set.
foreach ( $paragraph as $element ) {
  $p = \Drupal\paragraphs\Entity\Paragraph::load( $element['target_id'] );
  $text = $p->field_name->getValue();
}
Tim Ahmedov
fuente
Ya hice esto pero tu respuesta es correcta.
Pankaj Yogi
Tenga cuidado: esta solución no incluye traducciones.
ssibal
En lugar de Paragraph :: load ($ tid), ahora deberíamos usar \ Drupal :: entityManager () -> getStorage ('párrafo') -> load ($ tid).
JF Kiwad
6

Simplemente reemplace get()con el nombre del campo directamente:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();
Conocer
fuente
Wow, sí, pero ¿por qué?
leymannx
0

Este método funcionará un poco más rápido.

// Get data from field.
if ($paragraph_field_items = $node->get('field_paragraph')->getValue()) {
  // Get storage. It very useful for loading a small number of objects.
  $paragraph_storage = \Drupal::entityTypeManager()->getStorage('paragraph');
  // Collect paragraph field's ids.
  $ids = array_column($paragraph_field_items, 'target_id');
  // Load all paragraph objects.
  $paragraphs_objects = $paragraph_storage->loadMultiple($ids);
  /** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
  foreach ($paragraphs_objects as $paragraph) {
    // Get field from the paragraph.
    $text = $paragraph->get('field_title')->value;
    // Do something with $text...
  }
}

También puede implementar fácilmente este código en algún método en su servicio personalizado con @entity_type.managerargumento y almacenamiento de carga para nodos y párrafos __construct().

arraksis
fuente