Условие запроса сущности "не равно..."


Проблема:

Мне нужна фильтрация объектов на основе значения поля с множественным выбором.
Я хочу, чтобы мой запрос возвращал все сущности, кроме тех, у которых есть заданное значение ('doe' для этого примера).

Фактический:

значения с множественным выбором

foo|Choice 1
bar|Choice 2
doe|Choice 3

MyController.php

$query = \Drupal::entityQuery('node')
       ->condition('type', 'order');
$nids = $query->execute();
$entities = \Drupal::entityManager()->getStorage('node')->loadMultiple($nids);

Необходимо:

Поэтому мне нужно что-то вроде следующего:

$query = \Drupal::entityQuery('node')
       ->condition('type', 'order')
       ->condition('field_multiple_choice', '!=', 'doe');
$nids = $query->execute();
$entities = \Drupal::entityManager()->getStorage('node')->loadMultiple($nids);

Как я могу это сделать? Заранее спасибо.

 7
Author: kiamlaluno, 2016-05-09

2 answers

Я нашел это!

Я был недалеко, мне просто нужно изменить два последних параметра условия.

$query = \Drupal::entityQuery('node')
       ->condition('type', 'order')
       ->condition('field_multiple_choice', 'doe', '!=');
$nids = $query->execute();
$entities = \Drupal::entityManager()->getStorage('node')->loadMultiple($nids);

Как сказано в документе, публичная функция Интерфейс запроса::условие примите следующие аргументы:

condition( $field , $value = NULL , $operator = NULL , $langcode = NULL )
 16
Author: Antoine Subit, 2020-04-05 22:19:41

Невозможно проверить наличие сущностей со значением поля , если это поле может быть нулевым.

Вместо этого вы должны использовать условие ORCONDITION, чтобы не существовать ИЛИ :

$query= Drupal::service('entity.query')->get('myentity');
$group = $query->orConditionGroup()
->notExists('my_field')
->condition('my_field', '53', '<>');
$ids = $query->condition($group)->execute();
 2
Author: Rafael, 2020-06-12 10:20:33