/**
  * 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());
     }
 }