web-dev-qa-db-fra.com

Comment utiliser entityQuery pour trouver des nœuds avec un champ multi-valeur spécifique contenant une valeur spécifique (et aucune autre)?

J'ai un type de noeud "groupe" avec un champ de référence d'entité "field_things" qui peut référencer zéro ou plusieurs noeuds "chose". Je voudrais utiliser entityQuery pour trouver tous les "groupes" qui ont exactement une valeur pour field_things, et cette valeur est une "chose" spécifique.

Je ne peux pas dire à partir des documents comment combiner ces deux exigences.

4
kamm

Il semble donc que entityQuery() ne peut pas faire cela, mais entityQueryAggregate() le peut. Voici un exemple qui atteint l'objectif du message d'origine:

$thing_id = 101;
$q = \Drupal::entityQueryAggregate('node')
  ->condition('type', 'group')
  ->condition('field_things', $thing_id)
  ->groupBy('nid')
  ->conditionAggregate('field_things', 'COUNT', 1);
$res = $q->execute();

L'exécution de dpm($res) affichera:

Array
(
  [0] => Array
    (
      [nid] => 85
      [field_things_count] => 1
    )

  [1] => Array
    (
      [nid] => 33
      [field_things_count] => 1
    )

  [2] => Array
    (
      [nid] => 57
      [field_things_count] => 1
    )

  [3] => Array
    (
      [nid] => 54
      [field_things_count] => 1
    )
)
4
kamm