次のようなコードで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;
_を試してみましたが、どちらも機能しませんでした。
エンティティ参照フィールドの値を設定するにはどうすればよいですか?
次のようなコードを使用する必要があります。
$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();
単一値フィールドと複数値フィールドの違いに注意する必要があります。以下のコードはその方法を示しています。ソース: 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,
]);
}
}