/** * Add one query to another. * * @param SearchQueryInterface $toQuery * @param FieldQueryInterface $query * @param bool|null $sign * @return bool|SearchQueryInterface */ protected static function addQuery(SearchQueryInterface $toQuery, FieldQueryInterface $query, $sign = true) { if ($toQuery instanceof BooleanQueryInterface) { $subQueries = $toQuery->getSubQueries(); $signs = $toQuery->getSigns(); foreach ($subQueries as $key => $subQuery) { if ($newQuery = self::addQuery($subQuery, $query, $sign)) { $subQueries[$key] = $newQuery; $toQuery->setSubQueries($subQueries, $signs); return $toQuery; } } } elseif ($toQuery instanceof FieldQueryInterface) { $equal = $toQuery->equals($query); if ($equal === 0) { $newQuery = new Boolean(); $newQuery->setSubQueries([$toQuery, $query], [$sign, $sign]); return $newQuery; } elseif ($equal === 1) { return $toQuery; } } return false; }