Como consultar o EntryQuery para várias seções com tipos variados

Sep 16 2020

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

2 nstCactus Sep 16 2020 at 02:15

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.

2 AdamTsai Sep 16 2020 at 03:55

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