/** * Builds the search query and runs it * * @param SearchContainer $container * @return int the id of the search result */ public function runSearch(SearchContainer $container) { $this->_startTransaction(); $searchId = $this->generateSearchId($container->getTerm(), $container->targetTable); $query = $this->queryBuilder->buildSearchQuery($container, function () use($searchId) { return $searchId; }); $this->runSimple($query); $this->updateResultCount($searchId, $this->countSearchResults($searchId)); $this->_commit(); return $searchId; }
/** * @param Builder $searchQuery * @param SearchContainer $searchContainer * @param bool $hasSearchId */ private function buildFilterConditions(Builder $searchQuery, SearchContainer $searchContainer, $hasSearchId) { if ($hasSearchId) { $searchQuery->brace(); } $count = 0; $length = count($searchContainer->getFilterConditions()); foreach ($searchContainer->getFilterConditions() as $condition) { if ($count++ != 0 && $count <= $length) { $searchQuery->connect('&'); } $searchQuery->field([$condition->field, $condition->table])->equals()->value($condition->requestValue); } if ($hasSearchId) { if (count($searchContainer->getFilterConditions()) > 0) { $searchQuery->close()->connect('&'); } $searchQuery->field(['search_result', 'search_id'])->equals()->value($searchContainer->getSearchId()); } }