J'ai un type de contenu qui a un champ de référence d'entité qui permet aux utilisateurs d'ajouter plusieurs termes de taxonomie dans ce champ. J'essaie d'exécuter des requêtes qui récupèrent des nœuds qui ont un ensemble spécifique de termes de taxonomie dans ce champ.
Utiliser une valeur dans ce champ fonctionne très bien, comme ça.
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', 2)
->sort('field_last_name', DESC);
Où 2 est l'ID du terme que je recherche. Cependant, lorsque j'essaie de rechercher des nœuds contenant deux termes spécifiques comme celui-ci,
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8])
->sort('field_last_name', DESC);
Je reçois l'erreur
Numéro de paramètre non valide: le nombre de variables liées ne correspond pas au nombre de jetons:
J'ai aussi tenté
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8], 'IN')
->sort('field_last_name', DESC);
Ce qui n'échoue pas, mais ne fournit pas les résultats escomptés. Il affiche chaque nœud qui a soit le terme 2 OU le terme 8. Au lieu du terme 2 ET du terme 8 comme prévu. Comment pourrais-je effectuer une requête qui vérifie si un nœud a plusieurs valeurs spécifiques dans un champ de référence d'entité?
$and->condition('custom_taxonomy', [2], 'IN')
,$and->condition('custom_taxonomy', [8], 'IN')
'IN'
aussi. Ce qui fait la différence, ce sont les deux groupes ET séparés.Pour effectuer des requêtes complexes comme vous l'avez demandé, vous devrez utiliser un groupe de conditions et interroger le delta.
Voir la documentation QueryInterface :: condition .
la source
la source