web-dev-qa-db-ja.com

分類用語参照の値にプログラムでアクセスするにはどうすればよいですか?

ユーザーアカウントに分類用語参照フィールドがアタッチされています。

テキストフィールドの値を取得するのと同じ方法でプログラムで値を取得しようとしましたが、機能しません。

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;

参照されている用語の値(名前)をプログラムで取得するにはどうすればよいですか?

5
Patrick Kenny

分類用語は参照であるため、値(またはラベル)はユーザーエンティティに保存されず、target_idのみが保存されます。だからあなたは使う必要があります:

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

これはあなたのコードでなければなりません:

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;

次に、ラベルを検索する必要があります。

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

分類ラベル(名前)は$name

8

これを行うには少しクリーンな方法があります。参照フィールドで->get('field_name')を呼び出すと、 EntityReferenceFieldItemList のインスタンスが返されます。これを配列として使用して_target_id_にアクセスし、\Drupal::entityTypeManger()を手動でロードしてサブロードすることができますが、そのクラスには実際にこれを行うメソッドがあります。

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