administrador.modelado.params_sql.params_sql - gamboamartin/administrador GitHub Wiki
params_sql
La función params_sql
es una función pública que genera un objeto con los parámetros SQL necesarios para construir una consulta completa. Estos parámetros incluyen condiciones de seguridad, agrupamiento (GROUP BY
), ordenación (ORDER BY
), límites (LIMIT
), y desplazamiento (OFFSET
). La función valida los parámetros de entrada y retorna un objeto stdClass
con los componentes SQL generados.
Signatura
final public function params_sql(bool $aplica_seguridad, array $group_by, int $limit, array $modelo_columnas_extra, int $offset, array $order, string $sql_where_previo): array|stdClass
Parámetros
-
bool $aplica_seguridad
:
Un valor booleano que indica si se deben aplicar medidas de seguridad en la consulta SQL. Si estrue
, se generará la condición de seguridad. -
array $group_by
:
Un array que contiene los campos por los cuales se debe agrupar la consulta SQL (GROUP BY
). El array puede estar vacío si no se requiere agrupamiento. -
int $limit
:
Un valor entero que representa el número máximo de registros que se deben devolver en la consulta SQL. Debe ser mayor o igual a 0. -
array $modelo_columnas_extra
:
Un array que contiene las columnas adicionales del modelo, que se pueden utilizar para generar condiciones de seguridad. -
int $offset
:
Un valor entero que representa el número de registros que se deben omitir desde el inicio en la consulta SQL. Debe ser mayor o igual a 0. -
array $order
:
Un array que define la ordenación de los resultados de la consulta SQL (ORDER BY
). El array puede estar vacío si no se requiere ordenación. -
string $sql_where_previo
:
Una cadena que representa la condiciónWHERE
previa que se debe combinar con la condición de seguridad generada, en caso de que se aplique.
Retorno
array|stdClass
:
Retorna un objetostdClass
que contiene los parámetros SQL generados:group_by
,order
,limit
,offset
, yseguridad
. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Validación de
limit
yoffset
:- La función verifica que los valores de
limit
yoffset
sean mayores o iguales a 0. - Si alguno de estos valores es negativo, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función verifica que los valores de
-
Generación de los componentes SQL:
GROUP BY
: La función llama agroup_by_sql()
para generar la cláusulaGROUP BY
en base al arraygroup_by
.ORDER BY
: La función llama aorder_sql()
para generar la cláusulaORDER BY
en base al arrayorder
.LIMIT
: La función llama alimit_sql()
para generar la cláusulaLIMIT
.OFFSET
: La función llama aoffset_sql()
para generar la cláusulaOFFSET
.- Seguridad: La función llama a
seguridad()
para generar la condición de seguridad siaplica_seguridad
estrue
.
-
Manejo de errores durante la generación de componentes SQL:
- Si ocurre un error durante la generación de cualquiera de los componentes SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
-
Construcción del objeto
params
:- La función organiza los componentes SQL generados en un objeto
stdClass
con las siguientes propiedades:group_by
: La cláusulaGROUP BY
generada.order
: La cláusulaORDER BY
generada.limit
: La cláusulaLIMIT
generada.offset
: La cláusulaOFFSET
generada.seguridad
: La condición de seguridad generada, si corresponde.
- La función organiza los componentes SQL generados en un objeto
-
Retorno del objeto
params
:- La función retorna el objeto
params
con todos los componentes SQL generados.
- La función retorna el objeto
Ejemplos
$aplica_seguridad = true;
$group_by = ['categoria'];
$limit = 10;
$modelo_columnas_extra = ['usuario_permitido_id' => '(SELECT usuario_permitido_id FROM usuarios WHERE id = usuarios.id)'];
$offset = 0;
$order = ['fecha DESC'];
$sql_where_previo = 'activo = 1';
$params = $this->params_sql($aplica_seguridad, $group_by, $limit, $modelo_columnas_extra, $offset, $order, $sql_where_previo);
// Resultado esperado:
// Un objeto `stdClass` que contiene los componentes SQL generados.
// Un array de error si ocurre algún problema.
Código de la Función
final public function params_sql(bool $aplica_seguridad, array $group_by, int $limit, array $modelo_columnas_extra,
int $offset, array $order, string $sql_where_previo): array|stdClass
{
if($limit<0){
return $this->error->error(mensaje: 'Error limit debe ser mayor o igual a 0',data: $limit, es_final: true);
}
if($offset<0){
return $this->error->error(mensaje: 'Error $offset debe ser mayor o igual a 0',data: $offset,
es_final: true);
}
$group_by_sql = $this->group_by_sql(group_by: $group_by);
if(errores::$error){
return $this->error->error(mensaje: 'Error al generar sql',data:$group_by_sql);
}
$order_sql = $this->order_sql(order: $order);
if(errores::$error){
return $this->error->error(mensaje:'Error al generar order',data:$order_sql);
}
$limit_sql = $this->limit_sql(limit: $limit);
if(errores::$error){
return $this->error->error(mensaje:'Error al generar limit',data:$limit_sql);
}
$offset_sql = $this->offset_sql(offset: $offset);
if(errores::$error){
return $this->error->error(mensaje:'Error al generar offset',data:$offset_sql);
}
$seguridad = $this->seguridad(aplica_seguridad:$aplica_seguridad, modelo_columnas_extra: $modelo_columnas_extra,
sql_where_previo: $sql_where_previo);
if(errores::$error){
return $this->error->error(mensaje: 'Error al generar sql de seguridad', data: $seguridad);
}
$params = new stdClass();
$params->group_by = $group_by_sql;
$params->order = $order_sql;
$params->limit = $limit_sql;
$params->offset = $offset_sql;
$params->seguridad = $seguridad;
return $params;
}