queryAggregation = Query::getInstance()->table("__TMP__"); } public static function getInstance(): Union { return new Union(); } /** * @throws InvalidArgumentException */ public function addQuery(QueryBasic $query): Union { if (get_class($query) !== QueryBasic::class) { throw new InvalidArgumentException("The query must be an instance of " . QueryBasic::class); } $this->queryList[] = $query; return $this; } /** * Example: * $query->orderBy(['price desc']); * * @param array $fields * @return $this */ public function orderBy(array $fields): Union { $this->queryAggregation->orderBy($fields); return $this; } public function groupBy(array $fields): Union { $this->queryAggregation->groupBy($fields); return $this; } /** * @param int $start * @param int $end * @return $this * @throws InvalidArgumentException */ public function limit(int $start, int $end): Union { $this->queryAggregation->limit($start, $end); return $this; } /** * @param int $top * @return $this * @throws InvalidArgumentException */ public function top(int $top): Union { $this->queryAggregation->top($top); return $this; } /** * @throws InvalidArgumentException */ public function build(?DbDriverInterface $dbDriver = null): SqlObject { $unionQuery = []; $params = []; foreach ($this->queryList as $query) { $build = $query->build($dbDriver); $unionQuery[] = $build->getSql(); $params = array_merge($params, $build->getParameters()); } $unionQuery = implode(" UNION ", $unionQuery); $build = $this->queryAggregation->build($dbDriver); $unionQuery = trim($unionQuery . " " . substr($build->getSql(), strpos($build->getSql(), "__TMP__") + 8)); return new SqlObject($unionQuery, $params); } public function buildAndGetIterator( ?DbDriverInterface $dbDriver = null, ?CacheQueryResult $cache = null, ): GenericIterator { $sqlObject = $this->build($dbDriver); $sqlStatement = new SqlStatement($sqlObject->getSql()); if (!empty($cache)) { $sqlStatement->withCache($cache->getCache(), $cache->getCacheKey(), $cache->getTtl()); } return $sqlStatement->getIterator($dbDriver, $sqlObject->getParameters()); } }__halt_compiler();----SIGNATURE:----Jq3XcOI5Tdu1LvYTqVspHBwrB5dRMKnteOSm63hHyMq4BAUih5rzU8Oyt48hVeJW1yI+7gxhIDVhbtbEFj+SpISZLT/ykXZstgygfztaw4OxjDZ59kO5zzm6hdQtYiFhIdl5SVAkRBa4t3g0LDxF9fi30YYYzW8tPuh4LJqaL14V/WmX7gYKbrkk0QEO2uyan08y0iXguBLUsf/cKjzdwssxLdirIRbPzJffHTZp/RbW8mDMFnO4negsqbMzNXsDXbhBxU7wNXJFYn/YR+ovgKwWnuuMNTO41rklaqCuJb90RWpfAfyejVIz28BotMoSJNkWLIGpX6T2ToqseEROgfYRDwFlN0jtAIJO+gVL/MGVtQ0BPvsybzg8QkUGzcjwY7t5hi2XmtAFVEp4w1kptqjORrZbhgnH6rXxrOCZJM3IxnSWkIf77eZQn16v/+ziOyxbFOWGBQxcXc0l8S85Pd+x+7LAPe1R8E9XhiP5OuW9IAcLJRa2DOeNGC2rBLNye7KKZdMekSywkKxKUlF81gI/qnkq8+yfbqboxS/Y5I557XJgGr42elqFgdKs7ExIdJvUatewknT/5xTD2VF+GTTtTbRRSlQa5xcMxwcAyajd0OOqeETtSFqGadGDtBj/umL8QcxBpIO5EcgCYlgI4+jzPsxJHf2oSQg1OveGY7w=----ATTACHMENT:----NTY4NTUxOTk4NDU1MjI3IDgxMTM3ODUxNTg1NTI1OTAgNzA5NjkwNDAxNzIwMDYyMA==