private function whereInValues($method, $column, $values, $filter)
    {
        if (!$this->queryBuilder->isFilterable($filter, $values)) {
            return $this;
        }

        if ($values instanceof RawBindingInterface) {
            call_user_func(array($this->queryBuilder, $method), $column, $values->getTarget(), $filter);
        } elseif ($values instanceof RawSqlFragmentInterface) {
            call_user_func(array($this->queryBuilder, $method), $column, $values, $filter);
        } else {
            // Prepare bindings, firstly
            $bindings = array();

            foreach ($values as $value) {
                // Generate unique placeholder
                $placeholder = $this->getUniqPlaceholder();
                // Append to collection
                $bindings[$placeholder] = $value;
            }

            call_user_func(array($this->queryBuilder, $method), $column, array_keys($bindings), $filter);

            // Now bind what we have so far
            foreach ($bindings as $key => $value) {
                $this->bind($key, $value);
            }
        }

        return $this;
    }