src.where.filtro_fecha_base - gamboamartin/where GitHub Wiki
filtro_fecha_base
La función filtro_fecha_base
es una función privada que genera una cláusula SQL basada en un conjunto de filtros de fechas. Valida cada filtro de fecha proporcionado en un array y construye la cláusula SQL correspondiente, concatenando las cláusulas generadas para cada filtro.
Signatura
private function filtro_fecha_base(array $filtro_fecha): array|string
Parámetros
array $filtro_fecha
:
Un array de filtros de fecha. Cada filtro de fecha dentro del array debe ser un array asociativo que contenga las clavescampo_1
,campo_2
, yfecha
.
Retorna
array|string
:
Retorna la cláusula SQL generada como una cadena si la validación y generación son exitosas. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Iteración sobre el array de filtros de fecha:
- La función itera sobre cada filtro de fecha dentro del array
$filtro_fecha
.
- La función itera sobre cada filtro de fecha dentro del array
-
Validación de cada filtro de fecha:
- Por cada filtro de fecha, la función valida que sea un array utilizando
valida_filtro_fecha()
. - Si la validación falla, se genera un mensaje de error y se retorna un array con el mensaje de error.
- Por cada filtro de fecha, la función valida que sea un array utilizando
-
Generación de la cláusula SQL para cada filtro de fecha:
- Para cada filtro de fecha validado, la función llama a
genera_sql_filtro_fecha()
para generar la cláusula SQL correspondiente. - Si ocurre un error al generar la cláusula SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
- Para cada filtro de fecha validado, la función llama a
-
Concatenación de las cláusulas SQL:
- La función concatena cada cláusula SQL generada para cada filtro de fecha, formando una sola cláusula SQL final.
-
Retorno de la cláusula SQL final:
- Si todo es exitoso, la función retorna la cláusula SQL completa, que incluye todos los filtros de fecha.
Ejemplos
$filtro_fecha = [
[
'campo_1' => 'fecha_inicio',
'campo_2' => 'fecha_fin',
'fecha' => '2023-08-15'
],
[
'campo_1' => 'fecha_creacion',
'campo_2' => 'fecha_modificacion',
'fecha' => '2023-08-16'
]
];
$resultado = $this->filtro_fecha_base($filtro_fecha);
// Resultado esperado:
// "AND('2023-08-15' >= fecha_inicio AND '2023-08-15' <= fecha_fin) AND ('2023-08-16' >= fecha_creacion AND '2023-08-16' <= fecha_modificacion)"
Código de la Función
private function filtro_fecha_base(array $filtro_fecha): array|string
{
$filtro_fecha_sql = '';
foreach ($filtro_fecha as $fil_fecha){
if(!is_array($fil_fecha)){
return $this->error->error(mensaje: 'Error $fil_fecha debe ser un array',data: $fil_fecha,
es_final: true);
}
$valida = $this->valida_filtro_fecha(fil_fecha: $fil_fecha);
if(errores::$error){
return $this->error->error(mensaje: 'Error al validar filtro',data: $valida);
}
$sql = $this->genera_sql_filtro_fecha(fil_fecha: $fil_fecha, filtro_fecha_sql: $filtro_fecha_sql);
if(errores::$error){
return $this->error->error(mensaje: 'Error al obtener sql',data: $sql);
}
$filtro_fecha_sql.= $sql;
}
return $filtro_fecha_sql;
}