web-dev-qa-db-ja.com

drupal 8ノードの分類用語値を取得

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。

11
user32012

VJamie's の答えに基づいて構築します。

スクリプトの上部にuseステートメントを設定する必要があります。

use Drupal\taxonomy\Entity\Term;

または、クラスインスタンスの前に名前空間を付けます。

$term = \Drupal\taxonomy\Entity\Term::load($node->get('field_destination')->target_id);

それは致命的なものを取り除くでしょう。

18
Christian

EntityReferenceFieldItemListからいくつかのメソッドを使用することもできます。このフィールドによって参照されるエンティティを取得し、フィールドアイテムのデルタを保持します。

$node->get('field_destination')->referencedEntities();

あなたに役立つことを願っています

11
wau

次のコードは、必要なオブジェクトという用語を取得します。

$term = Term::load($node->get('field_destination')->target_id);

その用語の名前が必要な場合は、以下を実行できます

$name = $term->getName();

これがお役に立てば幸いです!

9
VJamie

これを行う

use Drupal\taxonomy\Entity\Term;
$term = Term::load($node->get('field_destination')->target_id);
$termname = $term->getName();

Drupal8では、値を取得するためにoopsアプローチを使用していました。

1
vinay kumar

entityプロパティは、任意の参照型フィールドから直接アクセスできます。

$node = 'myNode';
$termEntity = $node->get('field_taxonomy_reference')->entity;
if ($termEntity instanceof TermInterface) {
  $termLabel = $termEntity->label();
}
0
hugronaphor

これはそれを達成する方法の正しい方法です

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;
    }
}
0
Salman Haider