/** * {@inheritdoc} */ public function walkComparison(Comparison $comparison) { $value = $comparison->getValue()->getValue(); list($type, $field) = $this->explodeCombinedFieldString($comparison->getField()); $index = str_replace('.', '_', uniqid('', true)); $joinField = sprintf('search.%sFields', $type); $joinAlias = $this->driver->getJoinAlias($type, $index); $this->qb->leftJoin($joinField, $joinAlias); $searchCondition = ['fieldName' => $field, 'condition' => Criteria::getSearchOperatorByComparisonOperator($comparison->getOperator()), 'fieldValue' => $value, 'fieldType' => $type]; if ($type === Query::TYPE_TEXT) { if ($searchCondition['fieldValue'] === '') { $this->qb->setParameter('field' . $index, $searchCondition['fieldName']); return $joinAlias . '.field = :field' . $index; } else { return $this->driver->addTextField($this->qb, $index, $searchCondition, $this->setOrderBy); } } return $this->driver->addNonTextField($this->qb, $index, $searchCondition); }