silverstripe-framework/ORM/Filters/ComparisonFilter.php
Damian Mooyman 8dd644d25d
API Namespace all classes
Namespace all templates
Move difflib and BBCodeParser2 to thirdparty
Remove deprecated API marked for removal in 4.0
2016-09-08 10:23:17 +12:00

70 lines
2.0 KiB
PHP
Executable File

<?php
namespace SilverStripe\ORM\Filters;
use SilverStripe\ORM\DataQuery;
/**
* Base class for creating comparison filters, eg; greater than, less than, greater than or equal, etc
*
* If you extend this abstract class, you must implement getOperator() and and getInverseOperator
*
* getOperator() should return a string operator that will be applied to the filter,
* eg; if getOperator() returns "<" then this will be a LessThan filter
*
* getInverseOperator() should return a string operator that evaluates the inverse of getOperator(),
* eg; if getOperator() returns "<", then the inverse should be ">=
*/
abstract class ComparisonFilter extends SearchFilter {
/**
* Should return an operator to be used for comparisons
*
* @return string Operator
*/
abstract protected function getOperator();
/**
* Should return an inverse operator to be used for comparisons
*
* @return string Inverse operator
*/
abstract protected function getInverseOperator();
/**
* Applies a comparison filter to the query
* Handles SQL escaping for both numeric and string values
*
* @param DataQuery $query
* @return DataQuery
*/
protected function applyOne(DataQuery $query) {
$this->model = $query->applyRelation($this->relation);
$predicate = sprintf("%s %s ?", $this->getDbName(), $this->getOperator());
return $query->where(array(
$predicate => $this->getDbFormattedValue()
));
}
/**
* Applies a exclusion(inverse) filter to the query
* Handles SQL escaping for both numeric and string values
*
* @param DataQuery $query
* @return DataQuery
*/
protected function excludeOne(DataQuery $query) {
$this->model = $query->applyRelation($this->relation);
$predicate = sprintf("%s %s ?", $this->getDbName(), $this->getInverseOperator());
return $query->where(array(
$predicate => $this->getDbFormattedValue()
));
}
public function isEmpty() {
return $this->getValue() === array() || $this->getValue() === null || $this->getValue() === '';
}
}