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áusulaWHERE
.
Retorno
string|array
- Tipo:
string
oarray
- 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.
- Si la operación es exitosa, devuelve una cadena con la cláusula
Explicación Detallada
-
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_); }
- La función comienza copiando el objeto
-
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áusulaWHERE
. - 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 "; } }
- La función recorre cada clave en
-
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;
- Si al menos uno de los filtros tiene contenido, se devuelve la cadena
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;
}