protected function translate(array $filters, array $sorting = [], array $joins = [])
    {
        $constraints = [];

        foreach ($filters as $index => $filter) {
            if (array_key_exists('column', $filter) && array_key_exists('value', $filter)) {
                $constraints[] = $this->translateCriteria($filter, $joins);
                continue;
            }

            list($constraint, $sorting, $joins) = $this->translate($filter, $sorting, $joins);

            $this->translateOperation($index, $constraint, $constraints);
        }

        return [$constraints, $sorting, $joins];
    }