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

parentesis_filtro

La función parentesis_filtro ajusta los filtros de un objeto stdClass envolviendo en paréntesis los valores no vacíos de las claves especificadas en $keys_data_filter. Antes de aplicar los paréntesis, la función limpia los filtros utilizando la función limpia_filtros. Si se detecta algún error durante este proceso, devuelve un array de error.

Signatura

private function parentesis_filtro(stdClass $filtros, array $keys_data_filter): stdClass|array

Parámetros

stdClass $filtros

  • Tipo: stdClass
  • Descripción: Un objeto que contiene los filtros a los que se les aplicarán los paréntesis. Las claves de este objeto corresponden a los elementos de $keys_data_filter.

array $keys_data_filter

  • Tipo: array
  • Descripción: Un array de claves que representan los filtros dentro del objeto $filtros. Estos filtros serán limpiados y, si no están vacíos, sus valores serán envueltos en paréntesis.

Retorno

stdClass|array

  • Tipo: stdClass o array
  • Descripción:
    • Si el proceso es exitoso, devuelve el objeto $filtros modificado con los valores de los filtros envueltos en paréntesis cuando no están vacíos.
    • Si ocurre algún error durante la limpieza de los filtros, devuelve un array con los detalles del error.

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 directamente.
    $filtros_ = $filtros;
    
  2. Limpieza de los filtros:

    • Se llama a la función limpia_filtros para limpiar los valores de los filtros en función de las claves especificadas en $keys_data_filter. Esta función elimina espacios en blanco y asegura que los filtros estén bien formados.
    • Si se produce algún error durante este proceso, se devuelve un array 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. Aplicación de paréntesis:

    • La función recorre cada clave en $keys_data_filter. Si el valor de la clave correspondiente en $filtros_ no está vacío, el valor se envuelve en paréntesis.
    foreach($keys_data_filter as $key){
        if($filtros_->$key !== ''){
            $filtros_->$key = ' ('.$filtros_->$key.') ';
        }
    }
    
  4. Retorno del objeto ajustado:

    • Si no hay errores, la función devuelve el objeto $filtros_ con los valores ajustados.
    return $filtros_;
    

Ejemplos

$filtros = new stdClass();
$filtros->nombre = "Juan";
$filtros->edad = "30";
$filtros->ciudad = "";  // Vacío

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

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

// Resultado esperado:
// $filtros->nombre = " (Juan) ";
// $filtros->edad = " (30) ";
// $filtros->ciudad = "";  // No cambia porque está vacío.

Código de la Función

private function parentesis_filtro(stdClass $filtros, array $keys_data_filter): stdClass|array
    {
        $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_);
        }

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


        return $filtros_;
    }