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

filtros_full

La función filtros_full se encarga de limpiar y ajustar un conjunto de filtros proporcionados en un objeto stdClass, aplicando un formato específico que envuelve los valores de los filtros en paréntesis y concatenando los filtros con la palabra clave AND cuando corresponda. Si algún filtro tiene contenido, se envuelve en paréntesis, y si hay más de un filtro con contenido, se agregan las condiciones con AND. Si ocurre algún error en la limpieza de los filtros, se devuelve un mensaje de error.

Signatura

private function filtros_full(stdClass $filtros, array $keys_data_filter): stdClass

Parámetros

stdClass $filtros

  • Tipo: stdClass
  • Descripción: El objeto que contiene los filtros que se ajustarán. Las claves de este objeto deben coincidir con las proporcionadas en $keys_data_filter.

array $keys_data_filter

  • Tipo: array
  • Descripción: Un array de claves que representan los nombres de los filtros en el objeto $filtros. Estas claves serán utilizadas para decidir qué filtros deben ser ajustados.

Retorno

stdClass

  • Tipo: stdClass
  • Descripción:
    • Devuelve el objeto $filtros_ modificado, con los valores de los filtros ajustados y concatenados con la palabra clave AND cuando corresponda.

Explicación Detallada

  1. Copia del objeto $filtros:

    • La función comienza copiando el objeto $filtros en una nueva variable $filtros_ para trabajar con él sin modificar el objeto original.
    $filtros_ = $filtros;
    
  2. Limpieza de los filtros:

    • Llama a la función limpia_filtros para eliminar espacios en blanco y asegurarse de que los valores de los filtros estén bien formados. Si ocurre un error durante este proceso, se devuelve un array con un mensaje de error.
    $filtros_ = $this->limpia_filtros(filtros: $filtros_, keys_data_filter: $keys_data_filter);
    if (errores::$error) {
        return $this->error->error(mensaje: 'Error al limpiar filtros', data: $filtros_);
    }
    
  3. Ajuste y concatenación de filtros:

    • La función recorre cada clave en $keys_data_filter. Si el filtro correspondiente no está vacío, el valor se envuelve en paréntesis y se concatena con la palabra clave AND si ya existe otro filtro con contenido.
    • El primer filtro no llevará la palabra clave AND, pero los siguientes sí.
    $and = '';
    foreach ($keys_data_filter as $key) {
        if ($filtros_->$key !== '') {
            $filtros_->$key = " $and ( " . $filtros_->$key . " )";
            $and = " AND ";
        }
    }
    
  4. Retorno del objeto ajustado:

    • Finalmente, se devuelve el objeto $filtros_ con los valores de los filtros ajustados y concatenados según corresponda.
    return $filtros_;
    

Ejemplos

$filtros = new stdClass();
$filtros->nombre = "nombre = 'Juan'";
$filtros->edad = "edad > 30";
$keys_data_filter = ['nombre', 'edad'];

$resultado = $this->filtros_full($filtros, $keys_data_filter);

// Resultado esperado:
// $filtros->nombre = "( nombre = 'Juan' )";
// $filtros->edad = " AND ( edad > 30 )";

Código de la Función

private function filtros_full(stdClass $filtros, array $keys_data_filter): stdClass
    {
        $filtros_ = $filtros;
        $filtros_ = $this->limpia_filtros(filtros: $filtros_, keys_data_filter: $keys_data_filter);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al limpiar filtros',data: $filtros_);
        }

        $and = '';
        foreach ($keys_data_filter as $key){
            if($filtros_->$key !=='') {
                $filtros_->$key = " $and ( " . $filtros_->$key . ")";
                $and = " AND ";
            }
        }

        return $filtros_;
    }