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 claveAND
cuando corresponda.
- Devuelve el objeto
Explicación Detallada
-
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;
- La función comienza copiando el objeto
-
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_); }
- Llama a la función
-
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 claveAND
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 "; } }
- La función recorre cada clave en
-
Retorno del objeto ajustado:
- Finalmente, se devuelve el objeto
$filtros_
con los valores de los filtros ajustados y concatenados según corresponda.
return $filtros_;
- Finalmente, se devuelve el objeto
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_;
}