public handle ( eZ\Publish\Core\Persistence\Database\SelectQuery $query, eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion, string $column ) : eZ\Publish\Core\Persistence\Database\Expression | ||
$query | eZ\Publish\Core\Persistence\Database\SelectQuery | |
$criterion | eZ\Publish\API\Repository\Values\Content\Query\Criterion | |
$column | string | |
Результат | eZ\Publish\Core\Persistence\Database\Expression |
public function handle(SelectQuery $query, Criterion $criterion, $column)
{
$column = $this->dbHandler->quoteColumn($column);
switch ($criterion->operator) {
case Criterion\Operator::IN:
$filter = $query->expr->in($column, array_map(array($this, 'lowercase'), $criterion->value));
break;
case Criterion\Operator::BETWEEN:
$filter = $query->expr->between($column, $query->bindValue($this->lowercase($criterion->value[0])), $query->bindValue($this->lowercase($criterion->value[1])));
break;
case Criterion\Operator::EQ:
case Criterion\Operator::GT:
case Criterion\Operator::GTE:
case Criterion\Operator::LT:
case Criterion\Operator::LTE:
case Criterion\Operator::LIKE:
$operatorFunction = $this->comparatorMap[$criterion->operator];
$filter = $query->expr->{$operatorFunction}($column, $query->bindValue($this->lowercase($criterion->value)));
break;
case Criterion\Operator::CONTAINS:
$filter = $query->expr->like($column, $query->bindValue('%' . $this->lowercase($criterion->value) . '%'));
break;
default:
throw new RuntimeException("Unknown operator '{$criterion->operator}' for Field criterion handler.");
}
return $filter;
}
/** * Converts the criteria into query fragments * * @throws \RuntimeException if Criterion is not applicable to its target * * @param string $fieldTypeIdentifier * @param \eZ\Publish\Core\Persistence\Database\SelectQuery $query * @param \eZ\Publish\API\Repository\Values\Content\Query\Criterion $criterion * @param string $column * * @return \eZ\Publish\Core\Persistence\Database\Expression */ public function convertCriteria($fieldTypeIdentifier, SelectQuery $query, Criterion $criterion, $column) { if ($this->registry->has($fieldTypeIdentifier)) { return $this->registry->get($fieldTypeIdentifier)->handle($query, $criterion, $column); } if ($this->defaultHandler === null) { throw new RuntimeException("No conversion for a field type '{$fieldTypeIdentifier}' found."); } return $this->defaultHandler->handle($query, $criterion, $column); }