src.where.sql_fecha - gamboamartin/where GitHub Wiki
La función sql_fecha
es una función privada que genera una cláusula SQL basada en un rango de fechas. Valida que el objeto stdClass
contenga las propiedades requeridas (fecha
, campo_1
, y campo_2
) y que la fecha sea válida. Si la validación es exitosa, construye una cláusula SQL que compara si la fecha está dentro del rango definido por campo_1
y campo_2
.
private function sql_fecha(string $and, stdClass $data): string|array
-
string $and
:
Una cadena que representa el operador lógicoAND
que se utilizará en la cláusula SQL para unir esta condición con otras. -
stdClass $data
:
Un objeto que debe contener las propiedadesfecha
(la fecha a validar),campo_1
(el campo inicial del rango), ycampo_2
(el campo final del rango).
-
string|array
:
Retorna la cláusula SQL generada como una cadena si la validación es exitosa. En caso de error, retorna un array de error generado por$this->error->error()
.
-
Validación de la existencia de las claves requeridas:
- La función verifica que las propiedades
fecha
,campo_1
, ycampo_2
estén presentes en el objeto$data
. - Si alguna de las propiedades falta, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función verifica que las propiedades
-
Validación de contenido de las claves:
- La función también verifica que los valores de
fecha
,campo_1
, ycampo_2
no estén vacíos. - Si alguno de estos valores está vacío, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función también verifica que los valores de
-
Validación de la fecha:
- La función llama a
valida_fecha()
para verificar que el valor de la propiedadfecha
sea una fecha válida. - Si la validación de la fecha falla, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función llama a
-
Generación de la cláusula SQL:
- Si todas las validaciones son exitosas, la función construye una cláusula SQL que compara si
fecha
está dentro del rango definido porcampo_1
ycampo_2
.
- Si todas las validaciones son exitosas, la función construye una cláusula SQL que compara si
-
Retorno de la cláusula SQL:
- La función retorna la cláusula SQL generada.
$data = new stdClass();
$data->fecha = '2023-08-15';
$data->campo_1 = 'fecha_inicio';
$data->campo_2 = 'fecha_fin';
$and = 'AND';
$resultado = $this->sql_fecha($and, $data);
// Resultado esperado:
// "AND('2023-08-15' >= fecha_inicio AND '2023-08-15' <= fecha_fin)"
private function sql_fecha(string $and, stdClass $data): string|array
{
$keys = array('fecha','campo_1','campo_2');
foreach($keys as $key){
if(!isset($data->$key)){
return $this->error->error(mensaje: 'error no existe $data->'.$key, data: $data, es_final: true);
}
if(trim($data->$key) === ''){
return $this->error->error(mensaje:'error esta vacio $data->'.$key, data:$data, es_final: true);
}
}
$keys = array('fecha');
foreach($keys as $key){
$valida = $this->validacion->valida_fecha(fecha: $data->$key);
if(errores::$error){
return $this->error->error(mensaje:'error al validar '.$key,data: $valida);
}
}
return "$and('$data->fecha' >= $data->campo_1 AND '$data->fecha' <= $data->campo_2)";
}