ИЛИ условие внутри И условие в createQueryBuilder зависит от условия

Нам нужны все активные записи, использующие "тег", который соответствует search строка в createQueryBuilder,

Например: поиск "NEW YORK", который внутренне выполняет поиск "NEW" или "YORK" в тегах "new, ab, other"

Мой код:

$query = $this->createQueryBuilder();
$query->field('status')->equals("active");
if (isset($params["search"]) && !empty($params["search"])) {
    $searchArr = explode(" ", $params["search"]);
    foreach ($searchArr as $searchVal) {
        $query->addOr(
             $query->expr()->addOr($query->expr()->field('tags')->equals(new \MongoRegex('/.*' . $searchVal . '.*/')))
        );
    }
}

Это даст результат active OR (tag1 Or tag2), Ожидаемый результат active AND (tag1 Or tag2)

Какие-либо предложения?

1 ответ

Замени это

foreach ($searchArr as $searchVal) {
    $query->addOr(

этим

foreach ($searchArr as $searchVal) {
    $query->addAnd(
Другие вопросы по тегам