엔티티 참조 필드를 프로그래밍 방식으로 업데이트


23

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;있지만, 둘 중은 근무하지 않습니다.

엔터티 참조 필드의 값을 어떻게 설정합니까?

답변:


31

다음과 유사한 코드를 사용해야합니다.

    $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();

2
부모 노드가 이미 존재하지 않으면 작동하지 않는 것 같습니다. target_id 또는 entity 특성을 저장되지 않은 새 상위 노드에 지정하면 관계가 저장되지 않습니다. (NULL 엔터티 참조 필드에 할당 할 때도 작동하지 않지만 테스트하지는 않았습니다.)이 사건을 해결하는 방법을 아는 사람이 있습니까?
aaronbauman

@aaronbauman 당신은 그것에 대한 해결책을 얻었습니까?
에코

@echo 나는이 문제를 어떻게 해결했는지 기억하지 못한다. 동작에 대한 나의 설명이 정확하다면 이것은 버그입니다. drupal.org에 공개 된 이슈가 없다면
aaronbauman

@aaronbauman drupal.org/project/paragraphs/issues/2707017#comment-11872624 는 새로운 노드로 작업하는 데 도움이되었습니다. 따라서 버그가 아닌 것 같습니다.
에코

11

D7에서와 같이 D8에서 참조 필드의 주요 속성은 여전히 ​​다음과 target id같습니다.

$node->field_code_used_by->target_id = $user_id;

entity속성은 계산 된 값입니다. 이 값에 객체를 넣으면 drupal은 dababase에 저장하기 전에 객체를 id로 다시 변환합니다.

다중 값 필드

다중 값 필드에 항목을 추가하십시오.

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

이 속성 target_id은 기본 속성이므로 기본적으로 사용되므로 필요하지 않습니다. 따라서 대부분의 필드에서 간단한 PHP 배열과 같은 값을 추가 할 수 있습니다.

$node->field_code_used_by[] = $user_id;

여러 값을 허용하는 엔티티 참조 필드는 어떻습니까?
Brian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.