/** * Append mapping selects for a single property to given query-builder. * * @param QueryBuilder $queryBuilder * @param string $propertyName * @param string[] $locales */ private function appendSingleMapping(QueryBuilder $queryBuilder, $propertyName, $locales) { foreach ($locales as $locale) { $alias = sprintf('%s%s', $locale, str_replace('-', '_', ucfirst($propertyName))); $queryBuilder->addSelect('node', $this->propertyEncoder->localizedContentName($propertyName, $locale), $alias); } }
/** * @param QueryBuilder $qb * @param string $query * @param int $page * @param string $lang */ protected function buildQuery(QueryBuilder $qb, $query, $page, $lang) { $factory = $qb->getQOMFactory(); $qb->select('a', 'jcr:uuid', 'uuid')->addSelect('a', 'phpcr:class', 'class')->from($factory->selector('a', 'nt:unstructured'))->where($factory->descendantNode('a', $this->searchPath))->setFirstResult(($page - 1) * $this->perPage)->setMaxResults($this->perPage); $constraint = null; foreach ($this->searchFields as $field) { $column = $field; if (2 === strlen($lang) && 'attribute' === $this->translationStrategy) { $field = "phpcr_locale:{$lang}-{$field}"; } $qb->addSelect('a', $field, $column); $newConstraint = $factory->fullTextSearch('a', $field, $query); if (empty($constraint)) { $constraint = $newConstraint; } else { $constraint = $factory->orConstraint($constraint, $newConstraint); } } $qb->andWhere($constraint); if (2 === strlen($lang) && 'child' === $this->translationStrategy) { // TODO: check if we can/must validate lang to prevent evil hacking or accidental breakage $qb->andWhere($factory->comparison($factory->nodeName('a'), '=', $factory->literal('phpcr_locale:' . $lang))); } }
public function testAddSelect() { $qb = new QueryBuilder($this->qf); $this->assertCount(0, $qb->getColumns()); $qb->addSelect('selectorName', 'propertyName', 'columnName'); $this->assertCount(1, $qb->getColumns()); $qb->addSelect('selectorName', 'propertyName', 'columnName'); $this->assertCount(2, $qb->getColumns()); }
/** * Returns list of custom-url data-arrays. * * @param string $path * * @return \Iterator */ public function findUrls($path) { $session = $this->sessionManager->getSession(); $queryManager = $session->getWorkspace()->getQueryManager(); $qomFactory = $queryManager->getQOMFactory(); $queryBuilder = new QueryBuilder($qomFactory); $queryBuilder->addSelect('a', 'domainParts', 'domainParts')->addSelect('a', 'baseDomain', 'baseDomain'); $queryBuilder->from($queryBuilder->qomf()->selector('a', 'nt:unstructured')); $queryBuilder->where($queryBuilder->qomf()->comparison($queryBuilder->qomf()->propertyValue('a', 'jcr:mixinTypes'), QueryObjectModelConstantsInterface::JCR_OPERATOR_EQUAL_TO, $queryBuilder->qomf()->literal('sulu:custom_url'))); $queryBuilder->andWhere($queryBuilder->qomf()->descendantNode('a', $path)); $query = $queryBuilder->getQuery(); $result = $query->execute(); return array_map(function (Row $item) { return $this->generator->generate($item->getValue('a.baseDomain'), json_decode($item->getValue('a.domainParts'), true)); }, iterator_to_array($result->getRows())); }