administrador.base.orm.where.data_filtros_full - gamboamartin/administrador GitHub Wiki
data_filtros_full
La función data_filtros_full
genera un conjunto completo de filtros SQL a partir de los parámetros proporcionados, validando el tipo de filtro, construyendo filtros complejos y generando una cláusula WHERE
en base a los filtros definidos. La función también ajusta los filtros envolviéndolos en paréntesis y concatenando las condiciones con AND
cuando sea necesario. Si se produce algún error durante el proceso, devuelve un array con los detalles del error.
Signatura
final public function data_filtros_full(array $columnas_extra, array $diferente_de, array $filtro,
array $filtro_especial, array $filtro_extra, array $filtro_fecha,
array $filtro_rango, array $in, array $keys_data_filter, array $not_in,
string $sql_extra, string $tipo_filtro): array|stdClass
Parámetros
array $columnas_extra
- Tipo:
array
- Descripción: Un array que contiene columnas adicionales que serán utilizadas en la generación de la consulta SQL.
array $diferente_de
- Tipo:
array
- Descripción: Un array que contiene condiciones que excluyen valores en la consulta SQL (
!=
).
array $filtro
- Tipo:
array
- Descripción: Un array de filtros generales que serán utilizados en la consulta SQL.
array $filtro_especial
- Tipo:
array
- Descripción: Un array de condiciones especiales que se aplicarán a la consulta.
array $filtro_extra
- Tipo:
array
- Descripción: Filtros adicionales que se aplicarán en la consulta SQL.
array $filtro_fecha
- Tipo:
array
- Descripción: Filtros basados en fechas que se aplicarán a la consulta SQL.
array $filtro_rango
- Tipo:
array
- Descripción: Un array de rangos que serán utilizados en la consulta SQL.
array $in
- Tipo:
array
- Descripción: Un array de valores que serán utilizados en una cláusula
IN
en la consulta SQL.
array $keys_data_filter
- Tipo:
array
- Descripción: Un array de claves que representan los nombres de los filtros que serán utilizados para generar y ajustar las condiciones de la consulta.
array $not_in
- Tipo:
array
- Descripción: Un array de valores que serán utilizados en una cláusula
NOT IN
en la consulta SQL.
string $sql_extra
- Tipo:
string
- Descripción: Cualquier SQL adicional que se desee agregar a la consulta.
string $tipo_filtro
- Tipo:
string
- Descripción: El tipo de filtro que será validado y aplicado en la consulta. Se utiliza para definir la lógica de concatenación (por ejemplo,
AND
oOR
).
Retorno
array|stdClass
- Tipo:
array
ostdClass
- Descripción:
- Si la operación es exitosa, devuelve un objeto
stdClass
con los filtros generados y ajustados para la consulta SQL, incluyendo una cláusulaWHERE
cuando sea necesario. - Si ocurre un error en alguna parte del proceso, devuelve un array con un mensaje de error y los detalles correspondientes.
- Si la operación es exitosa, devuelve un objeto
Explicación Detallada
-
Validación del tipo de filtro:
- La función comienza validando el tipo de filtro (
$tipo_filtro
) medianteverifica_tipo_filtro
. Si el tipo de filtro no es válido, se devuelve un error.
$verifica_tf = (new \gamboamartin\where\where())->verifica_tipo_filtro(tipo_filtro: $tipo_filtro); if (errores::$error) { return $this->error->error(mensaje: 'Error al validar tipo_filtro', data: $verifica_tf); }
- La función comienza validando el tipo de filtro (
-
Generación de los filtros SQL:
- Se llama a la función
genera_filtros_sql
para generar una serie de filtros SQL a partir de los parámetros proporcionados. Si ocurre un error en este paso, se devuelve un array con el mensaje de error.
$filtros = $this->genera_filtros_sql(columnas_extra: $columnas_extra, diferente_de: $diferente_de, filtro: $filtro, filtro_especial: $filtro_especial, filtro_extra: $filtro_extra, filtro_rango: $filtro_rango, in: $in, keys_data_filter: $keys_data_filter, not_in: $not_in, sql_extra: $sql_extra, tipo_filtro: $tipo_filtro, filtro_fecha: $filtro_fecha); if (errores::$error) { return $this->error->error(mensaje: 'Error al generar filtros', data: $filtros); }
- Se llama a la función
-
Generación de la cláusula
WHERE
:- Se llama a la función
where
para generar la cláusulaWHERE
en base a los filtros proporcionados. Si no hay filtros con contenido, la cláusulaWHERE
no se generará. Si ocurre un error, se devuelve un mensaje de error.
$where = $this->where(filtros: $filtros, keys_data_filter: $keys_data_filter); if (errores::$error) { return $this->error->error(mensaje: 'Error al generar where', data: $where); }
- Se llama a la función
-
Ajuste y formato de los filtros:
- La función ajusta los filtros aplicando el formato correspondiente (envolviendo los valores en paréntesis y concatenando con
AND
si es necesario). Si ocurre un error durante este paso, se devuelve un mensaje de error.
$filtros = $this->filtros_full(filtros: $filtros, keys_data_filter: $keys_data_filter); if (errores::$error) { return $this->error->error(mensaje: 'Error al generar filtros', data: $filtros); }
- La función ajusta los filtros aplicando el formato correspondiente (envolviendo los valores en paréntesis y concatenando con
-
Asignación de la cláusula
WHERE
al objeto de filtros:- Una vez que los filtros han sido ajustados, la cláusula
WHERE
generada se asigna al objeto$filtros
.
$filtros->where = $where; return $filtros;
- Una vez que los filtros han sido ajustados, la cláusula
Ejemplo de uso
$columnas_extra = ['nombre', 'apellido'];
$diferente_de = ['id != 1'];
$filtro = ['estatus = "activo"'];
$filtro_especial = ['tipo = "admin"'];
$filtro_extra = [];
$filtro_fecha = ['fecha >= "2023-01-01"'];
$filtro_rango = ['rango BETWEEN "1000" AND "5000"'];
$in = ['id IN (1, 2, 3)'];
$keys_data_filter = ['estatus', 'tipo', 'fecha'];
$not_in = ['id NOT IN (4, 5)'];
$sql_extra = 'ORDER BY nombre ASC';
$tipo_filtro = 'AND';
$resultado = $this->data_filtros_full(
$columnas_extra, $diferente_de, $filtro, $filtro_especial, $filtro_extra, $filtro_fecha,
$filtro_rango, $in, $keys_data_filter, $not_in, $sql_extra, $tipo_filtro
);
Código de la Función
final public function data_filtros_full(array $columnas_extra, array $diferente_de, array $filtro,
array $filtro_especial, array $filtro_extra, array $filtro_fecha,
array $filtro_rango, array $in, array $keys_data_filter, array $not_in,
string $sql_extra, string $tipo_filtro): array|stdClass
{
$verifica_tf = (new \gamboamartin\where\where())->verifica_tipo_filtro(tipo_filtro: $tipo_filtro);
if(errores::$error){
return $this->error->error(mensaje: 'Error al validar tipo_filtro',data: $verifica_tf);
}
$filtros = $this->genera_filtros_sql(columnas_extra: $columnas_extra, diferente_de: $diferente_de,
filtro: $filtro, filtro_especial: $filtro_especial, filtro_extra: $filtro_extra,
filtro_rango: $filtro_rango, in: $in, keys_data_filter: $keys_data_filter, not_in: $not_in,
sql_extra: $sql_extra, tipo_filtro: $tipo_filtro, filtro_fecha: $filtro_fecha);
if(errores::$error){
return $this->error->error(mensaje:'Error al generar filtros', data:$filtros);
}
$where = $this->where(filtros: $filtros, keys_data_filter: $keys_data_filter);
if(errores::$error){
return $this->error->error(mensaje:'Error al generar where',data:$where);
}
$filtros = $this->filtros_full(filtros: $filtros, keys_data_filter: $keys_data_filter);
if(errores::$error){
return $this->error->error(mensaje:'Error al generar filtros',data:$filtros);
}
$filtros->where = $where;
return $filtros;
}