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:----oT8l5+ZUIWXbhtt35chsOiXlIYRPXVa4i6EDFE2Ax62k6CTlA60c8xrWW/QMCbp3LEExSUTcFtc6aeFxTYVbpEaqwNxv2mzApD9CITBGJr/xvIArOdHiZ67y2dqG9hOQTlogiqJyGPY9VrgRaiI7+rYFrRN3meIb6/CLJosVYHWfAASs9YTCzajiFOvdIbRpPgvrXBDoig6omau1WGDDOPPdIAVhMD/l+9i4VyDm+r9Q38bDjuYjggy2BP2ypKPgZrE46+Sc/l7409Vt/hwUCQ+KOBtT6sZ0Vt11iZBGLHqXdxohsRPZdENeBZJLPPbr7lJwrP1Q92bfjSGSLwAA4XRZrRL5gjtggU99bA7K1+C8cglQVxgFAEMBYBzlrrqN2zCe61D0CACO3tsCdzK4FrS41dgKURGz632a2crMmzYAt7iOe9Z+Az/bTABWsqTRw1rGDv8ZA8bRQKl0+hdgGCEzwtUh4c6KBCIvMzJQtTpi3ly4tgr+RlNJehcZN0C0Rst1sjM2FZZs6d6GPEr2YOaYYbhy0WO/ImuyCVKhYU2vgQYifBh5tR+l/ruX7CowMb3LLIwexIZqthNVFlGTmFBz/+3kxFsks0SvxJ4zccRrw4BJx00A4Wci2dI8oFU0DH6a7c30/qJ/WgErIc+RaiqeU13N3e0gEACtzhk8WTg=----ATTACHMENT:----ODYxOTc4OTUyMDg1MjEyNiA3MTAwMjA3Mzg0MDMwNDY2IDQwMTE0MDEyNDQzMzQwOTI=