/** * @param Query $query * @return string * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function combineQueryString(Query $query) { $selectString = $query->getQuery(); $fromString = ''; if ($query->getFrom()) { $fromString .= ' from ' . implode(', ', $query->getFrom()); } $whereParts = array(); foreach ($query->getOptions() as $whereOptions) { if (is_array($whereOptions['fieldValue'])) { $whereOptions['fieldValue'] = '(' . implode(', ', $whereOptions['fieldValue']) . ')'; } $whereParts[] = sprintf('%s((%s)%s %s %s)', $whereOptions['type'], $whereOptions['fieldType'], $whereOptions['fieldName'], $whereOptions['condition'], $whereOptions['fieldValue']); } $whereString = ''; if ($whereParts) { $whereString .= ' where ' . implode(' ', $whereParts); } $orderByString = ''; if ($query->getOrderBy()) { $orderByString .= ' ' . $query->getOrderBy(); } if ($query->getOrderDirection()) { $orderByString .= ' ' . $query->getOrderDirection(); } if ($orderByString) { $orderByString = ' order by' . $orderByString; } $limitString = ''; if ($query->getMaxResults() && $query->getMaxResults() != Query::INFINITY) { $limitString = ' limit ' . $query->getMaxResults(); } $offsetString = ''; if ($query->getFirstResult()) { $offsetString .= ' offset ' . $query->getFirstResult(); } return $selectString . $fromString . $whereString . $orderByString . $limitString . $offsetString; }
/** * Set order by for search query * * @param \Oro\Bundle\SearchBundle\Query\Query $query * @param \Doctrine\ORM\QueryBuilder $qb */ protected function addOrderBy(Query $query, QueryBuilder $qb) { $orderBy = $query->getOrderBy(); if ($orderBy) { $orderRelation = $query->getOrderType() . 'Fields'; $qb->leftJoin('search.' . $orderRelation, 'orderTable', 'WITH', 'orderTable.field = :orderField')->orderBy('orderTable.value', $query->getOrderDirection())->setParameter('orderField', $orderBy); } }
/** * @return mixed */ public function getSortOrder() { return $this->query->getOrderDirection(); }