ИЛИ условие внутри И условие в createQueryBuilder зависит от условия - PullRequest
0 голосов
/ 09 мая 2018

Нам нужны все активные записи, использующие «тег», который соответствует 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 Ответ

0 голосов
/ 09 мая 2018

Заменить

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

этим

foreach ($searchArr as $searchVal) {
    $query->addAnd(
...