ノードオブジェクトに段落エンティティをロードする方法は?


12

コンテンツタイプで段落を使用しています。段落タイプを作成し、コンテンツを追加しました。ここで、foreach。の段落をロードします。しかし、何も表示されません。$paras空です:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();

$ parasが空白であると言ったしかし、その価値をどのように印刷したかは示しませんでした。それはあるNULL値、空の文字列、または空の配列?私はすでにこれをコメントしましたが、あなたの答えは完全に異なるコードを示している答えに正しかったので、あなたの質問は少し混乱し、あなたが達成できないことは明らかではありません。
kiamlaluno

この質問は、私がdrupal 8の学習タスクを非常に新しくしたときに尋ねました。プロセスでエラーが発生したため、時間が空白になると思います。しかし、同じことをすればうまくいきます。ここで同じコードを実行するデモをチェックします。私はあなたのためだけに、これを作成d2log.ply.st/devel/phpの ユーザ名を::管理者パスワードを::管理者
パンカジヨギ

回答:


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();
}

すでにこれをしましたが、あなたの答えは正しいです。
パンカジヨギ

注意:このソリューションには翻訳が含まれていません。
ssibal

Paragraph :: load($ tid)の代わりに、\ Drupal :: entityManager()-> getStorage( 'paragraph')-> load($ tid)を使用する必要があります。
JFキワド

6

get()フィールド名に直接置き換えるだけです:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();

うわー、はい、しかしなぜですか?
レイマンクス

0

この方法は少し速く動作します。

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

また、カスタムサービスのメソッドに@entity_type.manager引数を使用してこのコードを簡単に実装し、のノードと段落のストレージをロードすることもできます__construct()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.