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 estrue
, se generarán; si esfalse
, no se generarán. -
bool $count
:
Un valor booleano que indica si la salida final debe ser un conteo total de registros. Si estrue
, 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
estrue
, retorna"COUNT(*) AS total_registros"
. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
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.
- La función llama a
-
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 objetostdClass
. 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.
- La función llama a
-
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.
- La función llama a
-
Reemplazo por conteo de registros (opcional):
- Si el parámetro
$count
estrue
, la función reemplaza la cadena final de columnas por"COUNT(*) AS total_registros"
.
- Si el parámetro
-
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;
}