public function addCondition($field, $value = false, $operator = '=')
    {
        if (is_array($field) && !$value) {
            foreach ($field as $key => $value) {
                // handles #6
                if (is_array($value)) {
                    call_user_func_array([$this, 'addCondition'], $value);
                // handles #7
                } elseif (!is_numeric($key)) {
                    $this->addCondition($key, $value);
                // handles #8
                } else {
                    $this->addCondition($value);
                }
            }

            return $this;
        }

        // handles #4 and #5
        $condition = [$field];

        // handles #1, #2, and #3
        if (func_num_args() >= 2) {
            $condition[] = $operator;
            $condition[] = $value;
        }

        $this->conditions[] = $condition;

        return $this;
    }