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 dejoinspara 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";
}