段落フィールドの値を取得する方法は?


12

drupalで製品リストを作成し、Webサービスで送信したいと思います。このために、各製品の段落を持つエンティティタイプを作成しました。段落をロードしてそのフィールドにアクセスするにはどうすればよいですか?これまでは、製品のtarget_idとtarget_revision_idのみが表示されていました。ありがとう!

$nodestorage = \Drupal::entityManager()->getStorage('node');
$productslist = $nodestorage->loadUnchanged(9)->toArray();
foreach($productslist['field_products'] as $prod) {
  debug($prod);
}

結果:

Array
(
  [target_id] => 1
  [target_revision_id] => 3
)

回答:


13

Paragraphエンティティクラスをインクルードし、それを使用Paragraph::load($entity_id)してロードできる必要があります。

例:

use Drupal\paragraphs\Entity\Paragraph;

$paragraph = Paragraph::load($target_id);
$foo = $paragraph->field_name->value;

9
$paragraph = Paragraph::load($target_id);
// Paragraph type could be also useful.
$prgTypeId = $paragraph->getType();
/** @var \Drupal\Core\Field\EntityReferenceFieldItemList $prgMediaField */
$prgMediaField = $paragraph->get('field_media');
$prgMediaFieldValue = $prgMediaField->getValue();

9

私はこれが古いことを知っていますが、将来に役立つかもしれません。Nodeエンティティによって参照されるエンティティをロードするには、entityプロパティを使用できます。たとえば、次のコードを考えてみましょう。

$nodestorage = \Drupal::entityManager()->getStorage('node');
$node = $nodestorage->loadUnchanged(9);

foreach ($node->field_products as $product) {

  /** @var Entity (i.e. Node, Paragraph, Term) $referenced_product **/
  $referenced_product = $product->entity;

  // Use now the entity to get the values you need.
  $field_value = $referenced_product->field_name->value;
}

そのため、エンティティIDでエンティティをロードする必要はなく、単に->entityエンティティの参照リストのユーザープロパティを使用するだけです。

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