web-dev-qa-db-ja.com

プログラムでエンティティ参照フィールドを更新する

次のようなコードでDrupal 7のエンティティ参照フィールドを更新(または値を設定)できることを知っています。

_ $node['field_code_used_by'][LANGUAGE_NONE][0]['target_id'] = $id;
_

プログラムでユーザーエンティティ参照フィールドの値をDrupal 8.に設定します。

$node->field_code_used_by->setValue(1);と_$node->field_code_used_by->entity->value = 1;_を試してみましたが、どちらも機能しませんでした。

エンティティ参照フィールドの値を設定するにはどうすればよいですか?

24
user66519

次のようなコードを使用する必要があります。

    $node = Node::load($nid);     
    $node->field_code_used_by->target_id = $user_id;
    $node->save();

マルチプルバリューフィールドの場合、リストの最後に値を追加するには、次のコードを使用します。

$node->field_code_used_by[] = ['target_id' => $user_id];

別の方法は、次のコードのように、entityプロパティにエンティティオブジェクトを設定することです。

    $node = Node::load($nid);
    $user = \Drupal\user\Entity\User::load(1);
    $node->field_code_used_by->entity = $user;
    $node->save();
32
Yusef

単一値フィールドと複数値フィールドの違いに注意する必要があります。以下のコードはその方法を示しています。ソース: https://stefvanlooveren.me/blog/how-programmatically-update-entity-reference-field-drupal-8

$imageIds = [
  '3',
  '32',
  '50'
];
foreach($imageIds as $index => $fid) {
  if($index == 0) {
    $node->set('field_article_images', $fid);
  } else {
    $node->get('field_article_images')->appendItem([
      'target_id' => $fid,
    ]);
  }
}
2