Comment interroger EntryQuery pour plusieurs sections avec différents types
Je pense que la meilleure façon de poser cette question est de donner un exemple:
Étant donné une variable $ query de type craft \ elements \ db \ EntryQuery, j'aimerais obtenir des entrées de 2 sections différentes: "people" et "news". Parmi les entrées de la section "personnes", je ne veux que celles avec le type d'entrée "Employés". Comment pourrais-je configurer cela pour que le filtre "type" ne s'applique qu'à 1 section? Si je les interrogais individuellement, ils ressembleraient à ceci:
$query->section('people')->type('Employees');
$query->section('insights');
Comment puis-je faire cela en 1 requête? Merci!
Réponses
Je ne suis pas sûr que vous puissiez y parvenir en une seule requête.
La solution la plus simple à laquelle je puisse penser à votre problème nécessite 3 requêtes:
{% set peopleIds = craft.entries().section('people').type('Employees').ids() %}
{% set insightIds = craft.entries().section('insights').ids() %}
{% set query = craft.entries().id(peopleIds|merge(insightIds))
Les 2 premières requêtes sont exécutées et renvoient les identifiants des entrées correspondantes. Vous pouvez ensuite créer votre EntryQuery en utilisant les identifiants comme seul critère.
Merci @nstCactus, c'est une excellente idée! Juste pour tous ceux qui recherchent l'équivalent PHP:
$peopleIds = \craft\elements\Entry::find()->section('people')->type('Employees')->ids(); $insightIds = \craft\elements\Entry::find()->section('insights')->ids();
$query->id(array_merge($peopleIds, $insightsIds));