/** * @param ContentQueryParser $contentQuery * * @return SearchQueryResultset */ public function __invoke(ContentQueryParser $contentQuery) { $set = new SearchQueryResultset(); foreach ($contentQuery->getContentTypes() as $contenttype) { $query = $contentQuery->getService('search'); $repo = $contentQuery->getEntityManager()->getRepository($contenttype); $query->setQueryBuilder($repo->createQueryBuilder($contenttype)); $query->setContentType($contenttype); $searchParam = $contentQuery->getParameter('filter'); $query->setParameters($contentQuery->getParameters()); $query->setSearch($searchParam); $contentQuery->runDirectives($query); $result = $repo->queryWith($query); if ($result) { if (count($result) > 0) { $weighter = $contentQuery->getService('search_weighter'); $weighter->setContentType($contenttype); $weighter->setResults($result); $weighter->setSearchWords($query->getSearchWords()); $scores = $weighter->weight(); $set->add($result, $contenttype, $scores); } else { $set->add($result, $contenttype); } } } if ($query->getSingleFetchMode()) { return $set->current(); } else { return $set; } }
/** * @param ContentQueryParser $contentQuery * * @return QueryResultset */ public function __invoke(ContentQueryParser $contentQuery) { $set = new QueryResultset(); /** @var SelectQuery $query */ $query = $contentQuery->getService('select'); foreach ($contentQuery->getContentTypes() as $contentType) { $repo = $contentQuery->getEntityManager()->getRepository($contentType); $query->setQueryBuilder($repo->createQueryBuilder($contentType)); $query->setContentType($contentType); /** Run the parameters through the whitelister. If we get a false back from this method it's because there * is no need to continue with the query. */ $params = $this->whitelistParameters($contentQuery->getParameters(), $repo); if (!$params && count($contentQuery->getParameters())) { continue; } /** Continue and run the query add the results to the set */ $query->setParameters($params); $contentQuery->runDirectives($query); $result = $repo->queryWith($query); if ($result) { $set->add($result, $contentType); } } if ($query->getSingleFetchMode()) { return $set->current(); } else { return $set; } }
/** * @param ContentQueryParser $contentQuery * * @return QueryResultset */ public function __invoke(ContentQueryParser $contentQuery) { $params = $contentQuery->getEntityManager()->createQueryBuilder()->getConnection()->getParams(); if (strpos($params['driver'], 'mysql') !== false) { $contentQuery->setDirective('order', 'RAND()'); } else { $contentQuery->setDirective('order', 'RANDOM()'); } return call_user_func_array($contentQuery->getHandler('select'), [$contentQuery]); }
public function postgresSearch(ContentQueryParser $contentQuery) { $set = new SearchQueryResultset(); foreach ($contentQuery->getContentTypes() as $contenttype) { $repo = $contentQuery->getEntityManager()->getRepository($contenttype); $query = $repo->createQueryBuilder($contenttype); $config = $contentQuery->getService('search_config'); $search = $contentQuery->getParameter('filter'); $adapter = new PostgresSearch($query, $config, explode(' ', $search)); $adapter->setContentType($contenttype); $result = $repo->findWith($adapter->getQuery()); $set->add($result, $contenttype); } return $set; }
/** * @param ContentQueryParser $contentQuery * * @return QueryResultset */ public function __invoke(ContentQueryParser $contentQuery) { $set = new QueryResultset(); foreach ($contentQuery->getContentTypes() as $contenttype) { $query = $contentQuery->getService('select'); $repo = $contentQuery->getEntityManager()->getRepository($contenttype); $query->setQueryBuilder($repo->createQueryBuilder($contenttype)); $query->setContentType($contenttype); $query->setParameters($contentQuery->getParameters()); $contentQuery->runDirectives($query); $result = $repo->queryWith($query); if ($result) { $set->add($result, $contenttype); } } if ($query->getSingleFetchMode()) { return $set->current(); } else { return $set; } }