administrador.base.orm.where.where_filtro - gamboamartin/administrador GitHub Wiki

where_filtro

La función where_filtro ajusta y valida la cláusula where en un objeto stdClass llamado $complemento. Primero, llama a la función where_base para inicializar y limpiar la cláusula where, y luego utiliza la función verifica_where para asegurar que la cláusula where esté correctamente respaldada por filtros con contenido. Si ambas validaciones son exitosas, la función ajusta el formato de la cláusula where añadiendo espacios adicionales y devuelve el objeto modificado. Si ocurre algún error en el proceso, devuelve un array con los detalles del error.

Signatura

private function where_filtro(stdClass $complemento, array $key_data_filter): array|stdClass

Parámetros

stdClass $complemento

  • Tipo: stdClass
  • Descripción: Un objeto que contiene la propiedad where y los filtros que deben ser validados. La función ajusta y valida la cláusula where basada en los filtros proporcionados.

array $key_data_filter

  • Tipo: array
  • Descripción: Un array de claves que representan los filtros a validar en el objeto $complemento. La función se asegura de que al menos uno de estos filtros tenga contenido si la cláusula where está presente.

Retorno

array|stdClass

  • Tipo: array o stdClass
  • Descripción:
    • Si la operación es exitosa, devuelve el objeto $complemento modificado, con la cláusula where ajustada y validada.
    • Si ocurre un error durante el ajuste o la validación de la cláusula where, devuelve un array de error con un mensaje y los detalles correspondientes.

Explicación Detallada

  1. Ajuste de la cláusula where mediante where_base:

    • La función comienza llamando a where_base para asegurarse de que la cláusula where esté presente, inicializada y en el formato correcto.
    • Si ocurre un error en where_base, se captura y se devuelve un array con los detalles del error.
    $complemento_r = $this->where_base(complemento: $complemento);
    if(errores::$error){
        return $this->error->error(mensaje: 'Error ajustar where', data: $complemento_r);
    }
    
  2. Validación de los filtros mediante verifica_where:

    • Después de ajustar la cláusula where, la función llama a verifica_where para validar que los filtros especificados en $key_data_filter estén correctamente aplicados.
    • Si where no está vacía, debe haber al menos un filtro con contenido. Si todos los filtros están vacíos, se devuelve un error.
    $verifica = $this->verifica_where(complemento: $complemento_r, key_data_filter: $key_data_filter);
    if(errores::$error){
        return $this->error->error(mensaje: 'Error validar where', data: $verifica);
    }
    
  3. Ajuste final de la cláusula where:

    • Si ambas validaciones son exitosas, la función ajusta el formato de la cláusula where, añadiendo espacios adicionales antes y después del valor para garantizar un formato consistente en las consultas SQL.
    $complemento_r->where = ' ' . $complemento_r->where . ' ';
    
  4. Retorno del objeto modificado:

    • Finalmente, se devuelve el objeto $complemento con el where ajustado.

Ejemplos

$complemento = new stdClass();
$complemento->where = "where id = 1";
$complemento->nombre = "Juan";
$complemento->edad = "  ";  // vacío

$keys_data_filter = ['nombre', 'edad'];

$resultado = $this->where_filtro($complemento, $keys_data_filter);

// Resultado esperado:
// $complemento->where = " WHERE ID = 1 ";

Código de la Función

private function where_filtro(stdClass $complemento, array $key_data_filter): array|stdClass
    {
        $complemento_r = $this->where_base(complemento: $complemento);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error ajustar where',data: $complemento_r);
        }

        $verifica = $this->verifica_where(complemento: $complemento_r,key_data_filter: $key_data_filter);
        if(errores::$error){
            return $this->error->error(mensaje:'Error validar where',data:$verifica);
        }

        $complemento_r->where = ' '.$complemento_r->where.' ';
        return $complemento_r;
    }