web-dev-qa-db-fra.com

Comment charger un nœud par une valeur de champ?

Je veux charger un certain nœud. Je ne connais pas l'id du nœud mais je sais qu'il a un certain champ de hachage qui est unique et je connais ce hachage.

Je veux charger le nœud via le champ de hachage. Comment puis je faire ça?

21
Andrew

Vous pouvez y parvenir en utilisant EntityFieldQuery.

Pour D8 EntityFieldQuery a été réécrit.

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

Comment récupérer les valeurs du champ d'une entité?

$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

Le moyen le plus rapide de charger un nœud spécifique par valeur de champ consiste à utiliser la méthode loadByProperties().

Vous spécifiez une ou plusieurs valeurs de champ et renvoyé est un tableau contenant les nœuds correspondant aux valeurs de champ:

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

Normalement, vous bouclez sur les nœuds. Dans votre cas, vous recherchez un nœud spécifique. Un seul nœud est également renvoyé dans le tableau, donc appliquez reset() et cela renvoie le nœud ou NULL si rien n'a été trouvé:

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