web-dev-qa-db-ja.com

フィールド値によってノードをロードする方法は?

特定のノードをロードしたい。ノードのIDはわかりませんが、ノードには一意の特定のハッシュフィールドがあり、そのハッシュを知っています。

ハッシュフィールドを介してノードをロードしたい。どうやってやるの?

21
Andrew

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();
15
DRUPWAY

フィールド値によって特定のノードをロードする最も速い方法は、メソッドloadByProperties()を使用することです。

1つ以上のフィールド値を指定すると、フィールド値に一致するノードを含む配列が返されます。

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

通常、ノードをループします。あなたの場合、あなたは1つの特定のノードを探しています。単一のノードも配列で返されるため、reset()を適用すると、ノードまたは何も見つからなかった場合はNULLが返されます。

_if ($node = reset($nodes)) {
  // found $node that matches the title
}
_
34
4k4