필드 값으로 노드를로드하는 방법?


19

특정 노드를로드하고 싶습니다. 노드의 ID를 모르지만 고유 한 특정 해시 필드가 있으며 해당 해시를 알고 있습니다.

해시 필드를 통해 노드를로드하고 싶습니다. 어떻게해야합니까?

답변:


14

EntityFieldQuery를 사용하여 달성 할 수 있습니다.

D8의 경우 EntityFieldQuery 가 다시 작성되었습니다.

드루팔 8 :

$query = \Drupal::entityQuery('entity_test');
$default_langcode_group = $query->andConditionGroup()
  ->condition('user_id', $properties[$default_langcode]['user_id'], '=', $default_langcode)
  ->condition('name', $properties[$default_langcode]['name'], '=', $default_langcode);
$langcode_group = $query->andConditionGroup()
  ->condition('name', $properties[$langcode]['name'], '=', $langcode)
  ->condition("$this->field_name.value", $field_value, '=', $langcode);
$result = $query
  ->condition('langcode', $default_langcode)
  ->condition($default_langcode_group)
  ->condition($langcode_group)
  ->sort('name', 'ASC', $default_langcode)
  ->execute();

엔터티 필드의 값을 가져 오려면 어떻게합니까?

$query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('changed', REQUEST_TIME, '<')
    ->condition('title', 'cat', 'CONTAINS')
    ->condition('field_tags.entity.name', 'cats');

$nids = $query->execute();

따라서 이것을 올바르게 이해하면 노드 ID (또는 조건에 따라 하나 또는 전혀 없음)를 반환하지만 여전히 Node::노드를로드하는 데 사용해야 합니다. 정확합니까?
앤드류

그래 네가 맞아.
DRUPWAY

31

필드 값으로 특정 노드를로드하는 가장 빠른 방법은이 방법을 사용하는 것 loadByProperties()입니다.

하나 이상의 필드 값을 지정하고 필드 값과 일치하는 노드를 포함하는 배열이 리턴됩니다.

$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadByProperties(['title' => $title]);

일반적으로 노드를 반복합니다. 귀하의 경우 하나의 특정 노드를 찾고 있습니다. 단일 노드도 배열로 반환되므로 적용 reset()하고 아무것도 찾지 못하면 노드를 반환하거나 NULL을 반환합니다.

if ($node = reset($nodes)) {
  // found $node that matches the title
}

1
내 경우 $node = reset...에는 해시 자체가 고유하기 때문에 코드의 두 번째 부분 ( )이 필요하지 않다고 가정 합니다.
앤드류

3
단일 노드는 여전히 배열에 있습니다. $ node = $ nodes [0]을 사용할 수 있지만 오류 로그에 경고를 피하기 위해 노드가 있는지 확인해야합니다. reset ()은 NULL을 자동으로 반환하므로 더 좋습니다.
4k4

왜 이것에 대한 모든 공감대가 확실하지 않은지; 원래 질문은 필드 값으로 노드를로드하는 것입니다. 제목과 같은 속성은 필드가 아닙니다.
liquidcms

@liquidcms, title은 노드 필드이며 다른 노드 필드를 사용할 수 있습니다. BTW Drupal 필드에는 하나 이상의 속성이 있습니다. 하나의 속성 인 경우 Drupal은 대부분의 속성 이름 값을 사용합니다. 따라서 대부분의 필드에서 두 용어는 서로 바꿔 사용할 수 있습니다.
4k4

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.