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 es true, 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ón WHERE previa que se debe combinar con la condición de seguridad generada, en caso de que se aplique.

Retorno

  • array|stdClass:
    Retorna un objeto stdClass que contiene los parámetros SQL generados: group_by, order, limit, offset, y seguridad. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Validación de limit y offset:

    • La función verifica que los valores de limit y offset 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.
  2. Generación de los componentes SQL:

    • GROUP BY: La función llama a group_by_sql() para generar la cláusula GROUP BY en base al array group_by.
    • ORDER BY: La función llama a order_sql() para generar la cláusula ORDER BY en base al array order.
    • LIMIT: La función llama a limit_sql() para generar la cláusula LIMIT.
    • OFFSET: La función llama a offset_sql() para generar la cláusula OFFSET.
    • Seguridad: La función llama a seguridad() para generar la condición de seguridad si aplica_seguridad es true.
  3. 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.
  4. 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áusula GROUP BY generada.
      • order: La cláusula ORDER BY generada.
      • limit: La cláusula LIMIT generada.
      • offset: La cláusula OFFSET generada.
      • seguridad: La condición de seguridad generada, si corresponde.
  5. Retorno del objeto params:

    • La función retorna el objeto params con todos los componentes SQL generados.

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;

    }