Bagaimana cara memuat entitas paragraf pada objek simpul?

12

Saya menggunakan paragraf dalam tipe konten saya. Saya telah membuat jenis paragraf dan menambahkan konten. Sekarang saya ingin memuat paragraf dalam a foreach. Tapi tidak ada yang muncul. $paraskosong:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();
Pankaj Yogi
sumber
Anda mengatakan $ paras menunjukkan kosong. tetapi Anda tidak menunjukkan bagaimana Anda mencetak nilainya. Apakah NULLnilai, string kosong, atau array kosong? Karena Anda berkomentar dengan saya sudah melakukan ini tetapi jawaban Anda benar untuk jawabannya, yang menunjukkan kode yang sama sekali berbeda, pertanyaan Anda menjadi sedikit bingung, dan tidak jelas apa yang tidak dapat Anda capai.
kiamlaluno
Pertanyaan ini ditanyakan ketika saya sangat baru dalam drupal 8 melakukan tugas untuk belajar. Saya pikir saya melakukan beberapa kesalahan dalam proses sehingga waktu itu kosong. Tetapi ketika saya melakukan hal yang sama sekarang berfungsi dengan baik. Anda periksa di sini demo menjalankan kode yang sama. Saya baru saja membuat ini untuk Anda, d2log.ply.st/devel/php username :: admin password :: admin
Pankaj Yogi

Jawaban:

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
sumber
Saya sudah melakukan ini tetapi jawaban Anda benar.
Pankaj Yogi
Hati-hati: solusi ini tidak termasuk terjemahan.
ssibal
Alih-alih Paragraph :: load ($ tid), kita sekarang harus menggunakan \ Drupal :: entityManager () -> getStorage ('paragraf') -> load ($ tid).
JF Kiwad
6

Cukup ganti get()dengan nama bidang secara langsung:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();
Ken
sumber
Wow, ya, tapi mengapa?
leymannx
0

Metode ini akan bekerja sedikit lebih cepat.

// 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...
  }
}

Anda juga dapat dengan mudah menerapkan kode ini dalam beberapa metode di layanan khusus Anda dengan @entity_type.managerargumen dan memuat penyimpanan untuk node dan paragraf dalam __construct().

arraksis
sumber