public static function FilterFactory::filterFromCondition in Elasticsearch Connector 8.5
Same name and namespace in other branches
- 8.7 src/ElasticSearch/Parameters/Factory/FilterFactory.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\FilterFactory::filterFromCondition()
- 8.2 src/ElasticSearch/Parameters/Factory/FilterFactory.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\FilterFactory::filterFromCondition()
- 8.6 src/ElasticSearch/Parameters/Factory/FilterFactory.php \Drupal\elasticsearch_connector\ElasticSearch\Parameters\Factory\FilterFactory::filterFromCondition()
Get query by Condition instance.
Parameters
Condition $condition:
Return value
array
Throws
\Exception
3 calls to FilterFactory::filterFromCondition()
- FilterFactoryTest::testFilterFromConditionA in tests/
src/ Unit/ ElasticSearch/ Parameters/ Factory/ FilterFactoryTest.php - @covers ::filterFromCondition
- FilterFactoryTest::testFilterFromConditionB in tests/
src/ Unit/ ElasticSearch/ Parameters/ Factory/ FilterFactoryTest.php - @covers ::filterFromCondition
- SearchBuilder::getQueryFilters in src/
ElasticSearch/ Parameters/ Builder/ SearchBuilder.php - Recursively parse Search API condition group.
File
- src/
ElasticSearch/ Parameters/ Factory/ FilterFactory.php, line 21
Class
- FilterFactory
- Class FilterFactory.
Namespace
Drupal\elasticsearch_connector\ElasticSearch\Parameters\FactoryCode
public static function filterFromCondition(Condition $condition) {
// Handles "empty", "not empty" operators.
if (is_null($condition
->getValue())) {
switch ($condition
->getOperator()) {
case '<>':
$filter = [
'exists' => [
'field' => $condition
->getField(),
],
];
break;
case '=':
$filter = [
'bool' => [
'must_not' => [
'exists' => [
'field' => $condition
->getField(),
],
],
],
];
break;
default:
throw new \Exception('Value is empty for ' . $condition
->getField() . '. Incorrect filter criteria is using for searching!');
}
}
else {
switch ($condition
->getOperator()) {
case '=':
$filter = [
'term' => [
$condition
->getField() => $condition
->getValue(),
],
];
break;
case 'IN':
$filter = [
'terms' => [
$condition
->getField() => array_values($condition
->getValue()),
],
];
break;
case '<>':
$filter = [
'bool' => [
'must_not' => [
'term' => [
$condition
->getField() => $condition
->getValue(),
],
],
],
];
break;
case '>':
$filter = [
'range' => [
$condition
->getField() => [
'from' => $condition
->getValue(),
'to' => NULL,
'include_lower' => FALSE,
'include_upper' => FALSE,
],
],
];
break;
case '>=':
$filter = [
'range' => [
$condition
->getField() => [
'from' => $condition
->getValue(),
'to' => NULL,
'include_lower' => TRUE,
'include_upper' => FALSE,
],
],
];
break;
case '<':
$filter = [
'range' => [
$condition
->getField() => [
'from' => NULL,
'to' => $condition
->getValue(),
'include_lower' => FALSE,
'include_upper' => FALSE,
],
],
];
break;
case '<=':
$filter = [
'range' => [
$condition
->getField() => [
'from' => NULL,
'to' => $condition
->getValue(),
'include_lower' => FALSE,
'include_upper' => TRUE,
],
],
];
break;
case 'BETWEEN':
$filter = [
'range' => [
$condition
->getField() => [
'from' => !empty($condition
->getValue()[0]) ? $condition
->getValue()[0] : NULL,
'to' => !empty($condition
->getValue()[1]) ? $condition
->getValue()[1] : NULL,
'include_lower' => FALSE,
'include_upper' => FALSE,
],
],
];
break;
case 'NOT BETWEEN':
$filter = [
'bool' => [
'must_not' => [
'range' => [
$condition
->getField() => [
'from' => !empty($condition
->getValue()[0]) ? $condition
->getValue()[0] : NULL,
'to' => !empty($condition
->getValue()[1]) ? $condition
->getValue()[1] : NULL,
'include_lower' => FALSE,
'include_upper' => FALSE,
],
],
],
],
];
break;
default:
throw new \Exception('Undefined operator ' . $condition
->getOperator() . ' for ' . $condition
->getField() . ' field! Incorrect filter criteria is using for searching!');
}
}
return $filter;
}