Como carregar a entidade de parágrafo no objeto nó?

12

Estou usando parágrafos no meu tipo de conteúdo. Eu criei um tipo de parágrafo e adicionei conteúdo. Agora eu quero carregar os parágrafos em a foreach. Mas nada está aparecendo. $parasestá vazia:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();
Pankaj Yogi
fonte
Você disse $ paras mostrando em branco. mas você não mostrou como imprimiu seu valor. É um NULLvalor, uma sequência vazia ou uma matriz vazia? Como você comentou, eu já fiz isso, mas sua resposta está correta , o que mostra um código completamente diferente, sua pergunta fica um pouco confusa e não está claro o que você não consegue alcançar.
kiamlaluno
Esta pergunta foi feita quando eu sou muito novo no drupal 8, fazendo tarefas para aprender. Acho que cometi algum erro no processo para que o tempo apareça em branco. Mas quando faço o mesmo agora, está funcionando bem. você verifica aqui uma demo que executa o mesmo código. Eu apenas criei isso para você, d2log.ply.st/devel/php nome de usuário :: admin senha :: admin
Pankaj Yogi

Respostas:

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
fonte
Eu já fiz isso, mas sua resposta está certa.
Pankaj Yogi 28/08
Cuidado: esta solução não inclui traduções.
ssibal
Em vez de Paragraph :: load ($ tid), agora devemos usar \ Drupal :: entityManager () -> getStorage ('paragraph') -> load ($ tid).
JF Kiwad 9/02/19
6

Basta substituir get()diretamente pelo nome do campo:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();
Ken
fonte
Uau, sim, mas por quê?
Leymannx
0

Este método funcionará um pouco mais 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...
  }
}

Você também pode implementar facilmente esse código em algum método no seu serviço personalizado com @entity_type.managerargumento e carregar armazenamento para nós e parágrafos __construct().

arraksis
fonte