Nextras\Orm\Collection\Helpers\ArrayCollectionHelper::createFilter PHP Метод

createFilter() публичный Метод

public createFilter ( string $condition, mixed $value ) : Closure
$condition string
$value mixed
Результат Closure
    public function createFilter($condition, $value)
    {
        list($chain, $operator, $sourceEntity) = ConditionParserHelper::parseCondition($condition);
        $sourceEntityMeta = $this->metadataStorage->get($sourceEntity ?: $this->mapper->getRepository()->getEntityClassNames()[0]);
        if ($value instanceof IEntity) {
            $value = $value->getValue('id');
        }
        if ($operator === ConditionParserHelper::OPERATOR_EQUAL) {
            if (is_array($value)) {
                $predicate = function ($property, $value) {
                    return in_array($property, $value, true);
                };
            } else {
                $predicate = function ($property, $value) {
                    return $property === $value;
                };
            }
        } elseif ($operator === ConditionParserHelper::OPERATOR_NOT_EQUAL) {
            if (is_array($value)) {
                $predicate = function ($property, $value) {
                    return !in_array($property, $value, true);
                };
            } else {
                $predicate = function ($property, $value) {
                    return $property !== $value;
                };
            }
        } elseif ($operator === ConditionParserHelper::OPERATOR_GREATER) {
            $predicate = function ($property, $value) {
                return $property > $value;
            };
        } elseif ($operator === ConditionParserHelper::OPERATOR_EQUAL_OR_GREATER) {
            $predicate = function ($property, $value) {
                return $property >= $value;
            };
        } elseif ($operator === ConditionParserHelper::OPERATOR_SMALLER) {
            $predicate = function ($property, $value) {
                return $property < $value;
            };
        } elseif ($operator === ConditionParserHelper::OPERATOR_EQUAL_OR_SMALLER) {
            $predicate = function ($property, $value) {
                return $property <= $value;
            };
        } else {
            throw new InvalidArgumentException();
        }
        return $this->createFilterEvaluator($chain, $predicate, $sourceEntityMeta, $value);
    }