it-swarm.com.de

Wie kann programmgesteuert auf den Wert einer Taxonomiebegriffsreferenz zugegriffen werden?

Ich habe ein Taxonomiebegriffsreferenzfeld an mein Benutzerkonto angehängt.

Ich habe versucht, den Wert programmgesteuert auf dieselbe Weise abzurufen wie den Wert für Textfelder, aber es funktioniert nicht.

use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;

$account = User::load($account->id());
// Returns the correct value.
$textfield = $account->get('field_textfield')->value;
// Does not return the correct value.
$termreference = $account->get('field_termreference')->value;

Wie soll ich den Wert (Namen) des referenzierten Begriffs programmgesteuert ermitteln?

5
Patrick Kenny

Da der Taxonomiebegriff eine Referenz ist, wird der Wert (oder die Bezeichnung) nicht in der Benutzerentität gespeichert, sondern nur in der Ziel-ID. Sie müssen also Folgendes verwenden:

$termreference = $account->get('field_termreference')->target_id;

Dies sollte Ihr Code sein:

use Drupal\Core\Session\AccountProxyInterface;
use Drupal\user\Entity\User;

$account = User::load($account->id());
// Returns the correct value.
$textfield = $account->get('field_textfield')->value;
// You need to use the target_id to access to the value.
$termreference = $account->get('field_termreference')->target_id;

Jetzt müssen Sie das Etikett durchsuchen:

$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($termreference);
$name = $term->getName();

Ihr Taxonomie-Label (Name) befindet sich in $name.

8

Es gibt einen etwas saubereren Weg, dies zu tun. Beim Aufruf von ->get('field_name') in einem Referenzfeld wird eine Instanz von EntityReferenceFieldItemList zurückgegeben. Sie können dies als Array verwenden und auf target_id Zugreifen und die \Drupal::entityTypeManger() manuell zum Unterladen laden, aber diese Klasse verfügt tatsächlich über eine Methode, die dies für Sie erledigt:

$entity->get('field_tags')->referencedEntities();
0
jpschroeder