Drupal\node\Entity\Node Object([in_preview] => [values:protected] => Array([vid] => Array([x-default] => 1)
[langcode] => Array
(
[x-default] => en
)
[field_destination] => Array
(
[x-default] => Array
(
[0] => Array
(
[target_id] => 2
)
)
)
Field_destination値を直接取得できません。これは、コンテンツタイプに添付された分類用語です。どんな助けもappriciated。
VJamie's の答えに基づいて構築します。
スクリプトの上部にuseステートメントを設定する必要があります。
use Drupal\taxonomy\Entity\Term;
または、クラスインスタンスの前に名前空間を付けます。
$term = \Drupal\taxonomy\Entity\Term::load($node->get('field_destination')->target_id);
それは致命的なものを取り除くでしょう。
EntityReferenceFieldItemListからいくつかのメソッドを使用することもできます。このフィールドによって参照されるエンティティを取得し、フィールドアイテムのデルタを保持します。
$node->get('field_destination')->referencedEntities();
あなたに役立つことを願っています
次のコードは、必要なオブジェクトという用語を取得します。
$term = Term::load($node->get('field_destination')->target_id);
その用語の名前が必要な場合は、以下を実行できます
$name = $term->getName();
これがお役に立てば幸いです!
これを行う
use Drupal\taxonomy\Entity\Term;
$term = Term::load($node->get('field_destination')->target_id);
$termname = $term->getName();
Drupal8では、値を取得するためにoopsアプローチを使用していました。
entity
プロパティは、任意の参照型フィールドから直接アクセスできます。
$node = 'myNode';
$termEntity = $node->get('field_taxonomy_reference')->entity;
if ($termEntity instanceof TermInterface) {
$termLabel = $termEntity->label();
}
これはそれを達成する方法の正しい方法です
use Drupal\taxonomy\Entity\Term;
function modulename_node_presave(Drupal\Core\Entity\EntityInterface $entity) {
switch ($entity->bundle()) {
case 'programs':
$term = Term::load($entity->get('field_program_names')->target_id);
$name = $term->getName();
$entity->setTitle($name);
break;
}
}