Пример #1
0
 /**
  * @param Asserter $asserter    asserter
  * @param integer  $aliasNumber aliasNumber
  */
 public function createFromAsserter(Asserter $asserter, $aliasNumber)
 {
     $this->aliasNumber = $aliasNumber;
     $field = $asserter->getField();
     $this->location = QueryBuilder::getFieldLocation($field);
     $this->isNeedJoin = in_array($this->location, array('timeline', 'actionComponent', 'component'));
     $locationSql = $this->isNeedJoin ? $this->location . $aliasNumber : $this->location;
     $sqlDefinition = sprintf('%s.%s', $locationSql, $field);
     $parameterKey = str_replace('.', '_', $sqlDefinition) . uniqid();
     $this->parameters[$parameterKey] = $this->transformValue($asserter->getValue(), $field);
     $operator = $asserter->getOperator();
     switch ($operator) {
         case Asserter::ASSERTER_IN:
         case Asserter::ASSERTER_NOT_IN:
             $this->dql = $sqlDefinition . ' ' . $operator . ' (:' . $parameterKey . ')';
             break;
         default:
             $this->dql = $sqlDefinition . ' ' . $operator . ' :' . $parameterKey;
             break;
     }
 }
Пример #2
0
 /**
  * @param QueryBuilder $qb qb
  */
 protected function filterCriterias($qb)
 {
     if ($this->criterias instanceof Operator) {
         $visitor = new OperatorVisitor();
     } elseif ($this->criterias instanceof Asserter) {
         $visitor = new AsserterVisitor();
     }
     $criteriaCollection = new CriteriaCollection();
     $visitor->visit($this->criterias, $criteriaCollection);
     $parameters = array();
     foreach ($criteriaCollection as $criteria) {
         $parameters = array_merge($criteria->getParameters(), $parameters);
         $aliasNumber = $criteria->getAliasNumber();
         switch ($criteria->getLocation()) {
             case 'timeline':
                 $timelineKey = sprintf('timeline%s', $aliasNumber);
                 $qb->leftJoin('action.timelines', $timelineKey, Expr\Join::WITH, $criteria->getDql());
                 break;
             case 'actionComponent':
                 $actionComponentKey = sprintf('actionComponent%s', $aliasNumber);
                 $qb->leftJoin('action.actionComponents', $actionComponentKey, Expr\Join::WITH, $criteria->getDql());
                 break;
             case 'component':
                 $actionComponentKey = sprintf('actionComponent%s', $aliasNumber);
                 $componentKey = sprintf('component%s', $aliasNumber);
                 $qb->leftJoin('action.actionComponents', $actionComponentKey)->leftJoin(sprintf('%s.component', $actionComponentKey), $componentKey, Expr\Join::WITH, $criteria->getDql());
                 break;
         }
     }
     $qb->andWhere($visitor->getDql());
     foreach ($parameters as $key => $value) {
         $qb->setParameter($key, $value);
     }
 }