web-dev-qa-db-ja.com

エンティティ(ノードなど)オブジェクトのフィールド値にアクセスするにはどうすればよいですか?

node_load((int) $nid)は、完全に設定されたノードエンティティを読み込みます。 $node->title->valueはタイトルを取得しますが、Drupal 8のフィールド値にアクセスするにはどうすればよいですか?

62
dbj44

_$entity_を配列に変換する必要はないと思いますが、これは単純に機能します。

_$entity->get('field_name')->getValue();
_

参考:_devel_kint_モジュールからkint()を使用すると、オブジェクト要素へのアクセスに使用できるすべてのメソッドがわかるため、比較的var_dump()はあまり役に立ちません。

95
Ashkar A.Rahman

drupal 8、$ nodeはクラスnodeの

 $node->field_machine_name->getValue();

または

$node->get('field_machine_name')->getValue();

値の配列を返します。

1つだけを期待する場合は、配列を文字列化することもできます。

$node->field_machine_name->getString();

または

 $node->get('field_machine_name')->getString();
58
Matoeil

フィールドの場合、たとえば_$node->body->value_を使用できるはずです。フィールド名がわからない場合は、Drupal 8の Devel モジュールをインストールして、 dsm($node)を介してノード。

35
tenken

いつでも$entity->toArray()を実行して、エンティティの内容を確認できます。 (例えばphpstormで)xdebugを使用する場合でも、エンティティオブジェクト自体を理解するのは非常に困難です。私はdsm($node) in Drupal 8は理にかなっています。ブラウザ内でのデバッグを主張する場合(そうすべきではない場合、Drupal 8は複雑すぎてxdebugなしではデバッグできません)dsm($node->toArray())が必要です。

17
user49

次のコードスニペットを使用してノードフィールド値を取得します

これは、URLからノードIDを取得するために使用されます

$nid = \Drupal::routeMatch()->getRawParameter($node_id);

Nidを使用してノードデータをロードするには

$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

これはフィールド値を取得するために使用されます。

$terms = $node->get('field_Name')->getValue();  

これはノードのタイトルを取得するために使用されます。

$product_name = $node->getTitle();
14
Swapnil Bijwe

私にとって、$entity(ノード)これは機能しました:

$entity->field_name->getValue();

8.1を使用します。

7
Alex

使用中(実際の正しい方法):

$node = \Drupal\node\Entity\Node::load($nid);
$node->get('nid')->value; // returns a raw value - Node ID

// Following both returns array structure containing value/target id nested value.
$node->get('nid')->value(); 
$node->nid->getValue();
6
Francis

それは単純です:

$node->get('field_name')->getValue();

フィールドがエンティティ参照フィールドである場合、参照されたエンティティを取得するいくつかの特別な方法があります。

ターゲットID(最初の要素)を取得するには:

$entity->get('field_entity_reference')->target_id;

ロードされたエンティティ(最初の要素)を取得するには:

$entity->get('field_entity_reference')->entity;

フィールドで->entityを使用すると、読み込まれたエンティティが自動的に返されます。

フィールドに複数の参照を含めることができる場合は、次のようにそれらをすべてフェッチできます。

$entities = $entity->get('field_entity_reference')->referencedEntities();

エンティティの配列が返されます。

6
user72672
use Drupal\node\Entity\Node

$node = Node::load($nid);
$title = $node->get('title')->value;

または

use Drupal\node\Entity\Node

$title = Node::load($nid)->get('title')->value;

ここに、ノードオブジェクトからの値へのアクセスに関するニースの記事があります https://www.frobiovox.com/posts/2016/03/28/simplify-drupal-8-field-value-calls.html

5
pwaterz