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
)
)
)
Not able to get field_destination value directly. It's a taxonomy term attached with the content type. Any help appriciated.
This is the correct way on how to achieve it
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;
}
}
Do this
use Drupal\taxonomy\Entity\Term;
$term = Term::load($node->get('field_destination')->target_id);
$termname = $term->getName();
In drupal8 we used to follow oops approach to get the values.
To build on VJamie's answer.
You will need to either set a use statement at the top of your script;
use Drupal\taxonomy\Entity\Term;
Or, prefix the class instance with the namespace;
$term = \Drupal\taxonomy\Entity\Term::load($node->get('field_destination')->target_id);
That will get rid of the fatals.
You can also use some methods from EntityReferenceFieldItemList: Gets the entities referenced by this field, preserving field item deltas:
$node->get('field_destination')->referencedEntities();
Hope it will be useful for you
The following code will get you the term object you need.
$term = Term::load($node->get('field_destination')->target_id);
If you need the name of that term you can do the following
$name = $term->getName();
Hope this helps out!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With