フィールド値でノードをロードする方法は?


19

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

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

回答:


14

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

したがって、これを正しく理解している場合、これはノードIDの束を返します(または条件に応じて1つ、またはなし)が、まだNode::ノードをロードするために使用する必要があります、正しいですか?
アンドリュー

はい、あなたは正しいです。
DRUPWAY

31

フィールド値で特定のノードをロードする最も簡単な方法は、メソッドを使用することloadByProperties()です。

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

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

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

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

1
私の場合$node = reset...、ハッシュ自体は一意であるため、コードの2番目の部分()は必要ないと思います。
アンドリュー

3
単一ノードはまだ配列内にあります。$ node = $ nodes [0]を使用できますが、エラーログの警告を回避するためにノードがあるかどうかを確認する必要があります。静かにNULLを返すため、reset()の方が適しています。
4k4

なぜこれに賛成票を投じているのかわからない。元の質問は、フィールド値でノードをロードすることです。プロパティ(タイトルなど)はフィールドではありません。
liquidcms

@liquidcms、タイトルはノードフィールドであり、他のノードフィールドを使用できます。BTW Drupalフィールドには1つ以上のプロパティがあります。プロパティが1つの場合、Drupalはほとんどの場合、プロパティ名の値を使用します。そのため、ほとんどのフィールドで両方の用語は交換可能です。
4k4

2つの異なるフィールドを照会するため、この例を参照してくださいdrupal.stackexchange.com/questions/250306/...
4k4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.