Eu tenho um tipo de conteúdo que possui um campo de referência de entidade que permite que os usuários adicionem vários termos de taxonomia nesse campo. Estou tentando realizar consultas que capturam nós que possuem um conjunto específico de termos de taxonomia dentro desse campo.
Usar um valor nesse campo funciona bem, assim.
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', 2)
->sort('field_last_name', DESC);
Onde 2 é o ID do termo que estou procurando. No entanto, quando tento procurar nós que contenham dois termos específicos,
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8])
->sort('field_last_name', DESC);
Eu recebo o erro
Número de parâmetro inválido: o número de variáveis associadas não corresponde ao número de tokens:
Eu também tentei
$query = \Drupal::entityQuery('node')
->condition('status', NODE_PUBLISHED)
->condition('type', 'custom_type')
->condition('custom_taxonomy', [2,8], 'IN')
->sort('field_last_name', DESC);
O que não falha, mas não fornece os resultados pretendidos. Ele exibe todos os nós que possuem o termo 2 OU termo 8. Em vez do termo 2 E termo 8 conforme pretendido. Como eu executaria uma consulta que verifica se um nó tem vários valores específicos em um campo de referência da entidade?
$and->condition('custom_taxonomy', [2], 'IN')
:$and->condition('custom_taxonomy', [8], 'IN')
'IN'
. O que faz a diferença são os dois grupos AND separados.Para fazer consultas complexas conforme solicitado, você precisará usar um grupo de condições e consultar o delta.
Consulte a documentação QueryInterface :: condition .
fonte
fonte