administrador.base.orm.modelo_base.integra_columns_final - gamboamartin/administrador GitHub Wiki

integra_columns_final

La función integra_columns_final es una función privada que integra y genera la cadena final de columnas SQL para una consulta, combinando varias partes de columnas y subconsultas según las configuraciones proporcionadas. La función también tiene la opción de reemplazar las columnas por un conteo total de registros si se especifica.

Signatura


private function integra_columns_final(array $columnas, array $columnas_seleccionables, string $columnas_sql, bool $con_sq, bool $count): array|string

Parámetros

  • array $columnas:
    Un array que contiene los nombres de las columnas o subconsultas que se desean incluir en la salida.

  • array $columnas_seleccionables:
    Un array que contiene una lista de alias de subconsultas que son seleccionables. Solo las subconsultas con alias presentes en este array serán incluidas en el resultado final.

  • string $columnas_sql:
    Una cadena que contiene las columnas SQL principales que se van a utilizar en la consulta.

  • bool $con_sq:
    Un valor booleano que indica si se deben generar subconsultas (sub_querys) y columnas adicionales. Si es true, se generarán; si es false, no se generarán.

  • bool $count:
    Un valor booleano que indica si la salida final debe ser un conteo total de registros. Si es true, la cadena final de columnas será reemplazada por "COUNT(*) AS total_registros".

Retorno

  • array|string:
    Retorna una cadena que representa las columnas SQL finales, integradas y combinadas de manera adecuada. Si $count es true, retorna "COUNT(*) AS total_registros". En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Generación de columnas adicionales y subconsultas:

    • La función llama a extra_columns() para generar las subconsultas y las columnas adicionales. Si ocurre un error durante este proceso, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Creación del objeto columns_data:

    • La función llama a columnas_data() para organizar las columnas principales, las subconsultas y las columnas adicionales en un objeto stdClass. Si ocurre un error durante la creación de este objeto, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Generación de la cadena final de columnas:

    • La función llama a genera_columns_final() para combinar todas las partes de las columnas SQL en una cadena final. Si ocurre un error durante este proceso, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Reemplazo por conteo de registros (opcional):

    • Si el parámetro $count es true, la función reemplaza la cadena final de columnas por "COUNT(*) AS total_registros".
  5. Retorno de la cadena final:

    • La función retorna la cadena final de columnas SQL, ya sea la combinación de columnas o el conteo total de registros.

Ejemplos

$columnas = ['total_pedidos', 'ultima_compra'];
$columnas_seleccionables = ['total_pedidos'];
$columnas_sql = 'id, nombre, email';
$con_sq = true;
$count = false;

$resultado = $this->integra_columns_final($columnas, $columnas_seleccionables, $columnas_sql, $con_sq, $count);

// Resultado esperado:
// Una cadena con las columnas SQL generadas y combinadas, o "COUNT(*) AS total_registros" si $count es true.

Código de la Función

private function integra_columns_final(array $columnas, array $columnas_seleccionables, string $columnas_sql,
                                           bool $con_sq, bool $count): array|string
    {
        $extra_columns = $this->extra_columns(columnas: $columnas,columnas_seleccionables:  $columnas_seleccionables,
            columnas_sql:  $columnas_sql,con_sq:  $con_sq);
        if (errores::$error) {
            return $this->error->error(mensaje: 'Error al generar extra_columns', data: $extra_columns);
        }


        $columns_data = $this->columnas_data(columnas_extra_sql: $extra_columns->columnas_extra_sql,
            columnas_sql:  $columnas_sql,
            sub_querys_sql:  $extra_columns->sub_querys_sql);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al maquetar columnas_data', data: $columns_data);
        }

        $columns_final = $this->genera_columns_final(columns_data: $columns_data);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al integrar columns_final', data: $columns_final);
        }

        if($count){
            $columns_final = "COUNT(*) AS total_registros";
        }

        return $columns_final;

    }