public function where(...$arguments): self
    {
        switch (count($arguments)) {
            case 1:
                if (! is_array($arguments[0])) {
                    throw new InvalidArgumentException;
                }
                
                foreach ($arguments[0] as $column => $data) {
                    if (is_array($data)) {
                        $this->where($column, ...$data);
                    } else {
                        $this->where($column, $data);
                    }
                }

                return $this;
            break;
            
            case 2:
                $arguments = [$arguments[0], '=', $arguments[1], 'AND'];    
            break;
            
            case 3:
                array_push($arguments, 'AND');   
            break;
        }

        return $this->setWhere([
            'column'     => $arguments[0],
            'value'      => $arguments[2],
            'operator'   => $arguments[3],
            'comparison' => $arguments[1]
        ]);
    }