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

where

La función where se encarga de generar una cláusula WHERE en base a los filtros proporcionados en un objeto stdClass. Limpia los filtros, valida su contenido y genera la cláusula WHERE solo si uno o más filtros tienen contenido. Si todos los filtros están vacíos, no se genera la cláusula. Si ocurre algún error durante la limpieza de los filtros, devuelve un array de error.

Signatura

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

Parámetros

stdClass $filtros

  • Tipo: stdClass
  • Descripción: Un objeto que contiene los filtros que se utilizarán para generar la cláusula WHERE. 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. Estos filtros serán utilizados para decidir si se debe generar la cláusula WHERE.

Retorno

string|array

  • Tipo: string o array
  • Descripción:
    • Si la operación es exitosa, devuelve una cadena con la cláusula WHERE si al menos uno de los filtros tiene contenido. Si no hay filtros con contenido, devuelve una cadena vacía.
    • Si ocurre un error durante la limpieza de los filtros, devuelve un array con un mensaje de error y los detalles correspondientes.

Explicación Detallada

  1. Limpieza de filtros:

    • La función comienza copiando el objeto $filtros en una nueva variable $filtros_ para trabajar con ella sin modificar el objeto original.
    • Luego, 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 la limpieza, se captura y se devuelve un mensaje de error.
    $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_);
    }
    
  2. Generación de la cláusula WHERE:

    • La función recorre cada clave en $keys_data_filter. Si el valor del filtro correspondiente no está vacío, se establece la cláusula WHERE.
    • Si todos los filtros están vacíos, la cláusula WHERE no se genera y se devuelve una cadena vacía.
    $where = '';
    foreach ($keys_data_filter as $key) {
        if ($filtros_->$key !== '') {
            $where = " WHERE ";
        }
    }
    
  3. Retorno de la cláusula WHERE:

    • Si al menos uno de los filtros tiene contenido, se devuelve la cadena WHERE. De lo contrario, se devuelve una cadena vacía.
    return $where;
    

Ejemplos

$filtros = new stdClass();
$filtros->nombre = "Juan";
$filtros->edad = "";  // Vacío
$keys_data_filter = ['nombre', 'edad'];

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

// Resultado esperado:
// $resultado = " WHERE ";

Código de la Función

private function where(stdClass $filtros, array $keys_data_filter): string|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_);
        }
        $where='';
        foreach($keys_data_filter as $key){
            if($filtros_->$key!==''){
                $where = " WHERE ";
            }
        }

        return $where;
    }