Source of file UnionQueryBuilder.php
Size: 2,458 Bytes - Last Modified: 2021-12-24T06:51:20+00:00
/var/www/docs.ssmods.com/process/src/src/UnionQueryBuilder.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | <?php namespace Heyday\QueryBuilder; /** * @package Heyday\QueryBuilder */ class UnionQueryBuilder extends QueryBuilder { /** @var \Heyday\QueryBuilder\QueryBuilder[] */ protected $queryBuilders = []; /** * @param null $dataClass * @param \Heyday\QueryBuilder\QueryBuilder[] $queryBuilders * @param \Heyday\QueryBuilder\Interfaces\QueryModifierInterface[] $queryModifiers * @param array $modifierData */ public function __construct( $dataClass = null, array $queryBuilders = [], array $queryModifiers = [], array $modifierData = [] ) { $this->dataClass = $dataClass; $this->setQueryBuilders($queryBuilders); $this->setQueryModifiers($queryModifiers); $this->setData($modifierData); } /** * @return \SQLQuery */ public function getQuery() { $query = parent::getQuery(); $query->setWhere(""); $query->setSelect("*"); $query->setFrom(sprintf( "(%s) x", $this->getUnionedQuery() )); return $query; } /** * @return string */ protected function getUnionedQuery() { return sprintf( "(%s)", implode( ") UNION (", $this->getQueriesSql() ) ); } /** * @return array */ protected function getQueriesSql() { return array_map(function (QueryBuilder $queryBuilder) { return $queryBuilder->setData($this->data)->getQuery()->sql(); }, $this->queryBuilders); } /** * @return \Heyday\QueryBuilder\QueryBuilder[] */ public function getQueryBuilders() { return $this->queryBuilders; } /** * @param \Heyday\QueryBuilder\QueryBuilder[] $queryBuilders * @return \Heyday\QueryBuilder\UnionQueryBuilder */ public function setQueryBuilders($queryBuilders) { $this->queryBuilders = []; foreach ($queryBuilders as $queryBuilder) { $this->addQueryBuilder($queryBuilder); } return $this; } /** * @param \Heyday\QueryBuilder\QueryBuilder $queryBuilder * @return \Heyday\QueryBuilder\UnionQueryBuilder */ public function addQueryBuilder(QueryBuilder $queryBuilder) { $this->queryBuilders[] = $queryBuilder; return $this; } } |