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 claveANDcuando corresponda.
- Devuelve el objeto
Explicación Detallada
-
Copia del objeto
$filtros:- La función comienza copiando el objeto
$filtrosen 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_filtrospara 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 claveANDsi 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_;
}