特定のノードをロードしたい。ノードのIDはわかりませんが、ノードには一意の特定のハッシュフィールドがあり、そのハッシュを知っています。
ハッシュフィールドを介してノードをロードしたい。どうやってやるの?
EntityFieldQueryを使用して実現できます。
D8の場合 EntityFieldQuery が書き直されました。
Drupal 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();
フィールド値によって特定のノードをロードする最も速い方法は、メソッドloadByProperties()
を使用することです。
1つ以上のフィールド値を指定すると、フィールド値に一致するノードを含む配列が返されます。
_$nodes = \Drupal::entityTypeManager()
->getStorage('node')
->loadByProperties(['title' => $title]);
_
通常、ノードをループします。あなたの場合、あなたは1つの特定のノードを探しています。単一のノードも配列で返されるため、reset()
を適用すると、ノードまたは何も見つからなかった場合はNULLが返されます。
_if ($node = reset($nodes)) {
// found $node that matches the title
}
_