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]
        ]);
    }
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]
        ]);
    }
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 ] ] ) ; }
Prepares a WHERE clause to be appended to the query string.

This is a flexible method that may be called a number of ways.
Some examples:

- where('column', 'value')
- where('column', '>=', 'value')
- where( ['column' => 'value', 'column2' => ['!=', 'value2', 'OR']] )
- where('column', '=', 'value', 'AND')

@throws \InvalidArgumentException if only one value was passed and it isn't an array
Prepares a WHERE clause to be appended to the query string .