public function donde(array $params = null)
    {
        if ($params) {
            $terminos_sql = [];

            foreach ($params as $llave => $valor) {
                // Limpiamos la llave
                $llave = trim($llave);

                // Extraemos operador
                if (false === ($temp = strpos($llave, ' '))) {
                    $restante = $llave;
                } else {
                    $restante = substr($llave, 0, $temp);
                    $operador = substr($llave, $temp + 1);
                }
                if (empty($operador)) {
                    if (is_array($valor)) {
                        $operador = 'IN';
                    } else {
                        $operador = '=';
                    }
                }

                // Extramos campo y su tipo
                if (false !== ($temp = strpos($restante, '|'))) {
                    $tipo = substr($restante, $temp + 1);
                    $campo = substr($restante, 0, $temp);
                } else {
                    $campo = $restante;
                }
                if (empty($tipo)) $tipo = 'txt';

                // Preparamos el valor segun el tipo de campo
                if (is_array($valor)) {
                    $valor_preparado = '(' . implode(',', $this->prepararValor($valor, $tipo)) . ')';
                } else {
                    $valor_preparado = $this->prepararValor($valor, $tipo);
                }

                // Escribimos el termino dentro de los filtros
                $terminos_sql[] = "{$campo} {$operador} {$valor_preparado}";

                // Limpiamos las variables repetitivas
                unset($restante, $campo, $operador, $tipo);
            }

            // Escribimos todos los terminos en formato SQL
            $this->sentencia .= ' WHERE ' . implode(' AND ', $terminos_sql);

        }

        return $this;
    }