Como consultar o EntryQuery para várias seções com tipos variados
Acho que a melhor maneira de fazer essa pergunta é dando um exemplo:
Dada uma variável $ query do tipo craft \ elements \ db \ EntryQuery, gostaria de obter entradas de 2 seções diferentes: "pessoas" e "notícias". Das entradas da seção "pessoas", quero apenas aquelas com o tipo de entrada "Funcionários". Como eu configuraria isso para que o filtro "tipo" se aplique apenas a uma seção? Se eu os estivesse questionando individualmente, eles teriam a seguinte aparência:
$query->section('people')->type('Employees');
$query->section('insights');
Como posso fazer isso em 1 consulta? Obrigado!
Respostas
Não tenho certeza se você pode conseguir isso em uma consulta.
A solução mais fácil que posso pensar para o seu problema requer 3 perguntas:
{% set peopleIds = craft.entries().section('people').type('Employees').ids() %}
{% set insightIds = craft.entries().section('insights').ids() %}
{% set query = craft.entries().id(peopleIds|merge(insightIds))
As primeiras 2 consultas são executadas e retornam os ids das entradas correspondentes. Você pode então criar sua EntryQuery usando os ids como o único critério.
Obrigado @nstCactus, é uma ótima ideia! Apenas para quem procura o equivalente em 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));