administrador.base.orm.modelo_base.genera_consulta_base - gamboamartin/administrador GitHub Wiki
genera_consulta_base
La función genera_consulta_base
es una función pública que genera la consulta SQL base para un modelo, integrando columnas, subconsultas, uniones (JOINs
), y otras configuraciones especificadas. Es una función flexible que permite construir consultas SQL complejas de manera dinámica.
Signatura
final public function genera_consulta_base(array $columnas = array(), array $columnas_by_table = array(), bool $columnas_en_bruto = false, bool $con_sq = true, bool $count = false, array $extension_estructura = array(), array $extra_join = array(), array $renombradas = array()):array|string
Parámetros
-
array $columnas
(opcional):
Un array que contiene los nombres de las columnas o subconsultas que se desean incluir en la consulta. El valor por defecto es un array vacío. -
array $columnas_by_table
(opcional):
Un array que contiene los nombres de las tablas que se van a utilizar en la consulta SQL. Este array solo se debe utilizar si la lógica de columnas por tabla está habilitada. El valor por defecto es un array vacío. -
bool $columnas_en_bruto
(opcional):
Un valor booleano que indica si las columnas deben ser procesadas en su forma original (true
) o si deben ser ajustadas y personalizadas (false
). El valor por defecto esfalse
. -
bool $con_sq
(opcional):
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. El valor por defecto estrue
. -
bool $count
(opcional):
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"
. El valor por defecto esfalse
. -
array $extension_estructura
(opcional):
Un array que define la estructura de extensión para la consulta SQL. Las claves del array son los nombres de las tablas y los valores contienen los datos específicos relacionados con la tabla. El valor por defecto es un array vacío. -
array $extra_join
(opcional):
Un array que contiene información sobre columnas adicionales que se deben agregar a la consulta desde uniones (JOIN
) extras. El valor por defecto es un array vacío. -
array $renombradas
(opcional):
Un array que contiene las tablas y los nombres alternativos (renombres) que deben ser aplicados. Las claves del array son los nombres de las tablas, y los valores son arrays que contienen la información relacionada con el renombrado de columnas. El valor por defecto es un array vacío.
Retorno
array|string
:
Retorna una cadena que representa la consulta SQL base generada. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Ajuste del nombre de la tabla:
- La función elimina el prefijo
models\
del nombre de la tabla para asegurar que esté en un formato adecuado para la consulta SQL.
- La función elimina el prefijo
-
Obtención de las columnas completas:
- La función llama a
obten_columnas_completas()
para obtener todas las columnas necesarias para la consulta. 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
-
Generación de las uniones (
JOINs
):- La función llama a
tablas()
desde una instancia dejoins
para generar las tablas y las uniones necesarias para la consulta. 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
-
Integración de las columnas finales:
- La función llama a
integra_columns_final()
para combinar y generar la cadena final de columnas SQL. 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
-
Construcción y retorno de la consulta SQL:
- Finalmente, la función construye la consulta SQL utilizando las columnas finales y las tablas generadas, y retorna la consulta como una cadena.
Ejemplos
$columnas = ['total_pedidos', 'ultima_compra'];
$columnas_by_table = ['usuarios', 'pedidos'];
$columnas_en_bruto = false;
$con_sq = true;
$count = false;
$extension_estructura = ['usuarios' => ['campo1', 'campo2']];
$extra_join = ['extra_campo' => 'valor_extra'];
$renombradas = ['usuarios' => ['renombre' => 'usuarios_activos']];
$resultado = $this->genera_consulta_base($columnas, $columnas_by_table, $columnas_en_bruto, $con_sq, $count, $extension_estructura, $extra_join, $renombradas);
// Resultado esperado:
// Una cadena que representa la consulta SQL base generada.
// Un array de error si ocurre algún problema.
Código de la Función
final public function genera_consulta_base(
array $columnas = array(), array $columnas_by_table = array(), bool $columnas_en_bruto = false,
bool $con_sq = true, bool $count = false, array $extension_estructura = array(), array $extra_join = array(),
array $renombradas = array()):array|string
{
$this->tabla = str_replace('models\\','',$this->tabla);
$columnas_seleccionables = $columnas;
$columnas_sql = (new columnas())->obten_columnas_completas(modelo: $this,
columnas_by_table: $columnas_by_table, columnas_en_bruto: $columnas_en_bruto,
columnas_sql: $columnas_seleccionables, extension_estructura: $extension_estructura,
extra_join: $extra_join, renombres: $renombradas);
if(errores::$error){
return $this->error->error(mensaje: 'Error al obtener columnas en '.$this->tabla,data: $columnas_sql);
}
$tablas = (new joins())->tablas(columnas: $this->columnas, extension_estructura: $extension_estructura,
extra_join: $extra_join, modelo_tabla: $this->tabla, renombradas: $renombradas, tabla: $this->tabla);
if(errores::$error){
return $this->error->error(mensaje: 'Error al generar joins e '.$this->tabla, data: $tablas);
}
$columns_final = $this->integra_columns_final(columnas: $columnas,
columnas_seleccionables: $columnas_seleccionables,columnas_sql: $columnas_sql,
con_sq: $con_sq,count: $count);
if(errores::$error){
return $this->error->error(mensaje: 'Error al integrar columns_final', data: $columns_final);
}
return /** @lang MYSQL */ "SELECT $columns_final FROM $tablas";
}