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:
stringoarray - Descripción:
- Si la operación es exitosa, devuelve una cadena con la cláusula
WHEREsi 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
$filtrosen una nueva variable$filtros_para trabajar con ella sin modificar el objeto original. - Luego, 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 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
WHEREno 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;
}