administrador.modelado.joins.extensiones_join.21.24.0 - gamboamartin/administrador GitHub Wiki
extensiones_join
La función extensiones_join genera extensiones de la cláusula JOIN para una consulta SQL basada en la estructura proporcionada.
Signatura
private function extensiones_join(array $extension_estructura, string $modelo_tabla, string $tablas): array|string
Parámetros
$extension_estructura
: (array) Un array que contiene la estructura de las extensiones de la cláusula JOIN.$modelo_tabla
: (string) l nombre del modelo de tabla utilizado para validar los datos.$tablas
: (string) Una cadena que representa las tablas principales involucradas en la consulta.
Retorna
string
: La función devuelve las tablas con las extensiones de JOIN aplicadas como una cadena de texto.
Explicación Detallada
La función recorre cada elemento del array $extension_estructura, que contiene los datos de las extensiones de JOIN.
Para cada tabla en las extensiones, verifica que los datos sean un array y los valida utilizando el modelo de tabla proporcionado.
Genera la cláusula JOIN utilizando la función join_base para cada tabla en las extensiones.
Concatena las cláusulas JOIN generadas con las cláusulas existentes.
Devuelve las tablas con las extensiones de JOIN aplicadas.
Ejemplos
$extension_estructura = [
'tabla_extension_1' => [
'key' => 'id_usuario',
'enlace' => 'usuarios',
'key_enlace' => 'id'
],
'tabla_extension_2' => [
'key' => 'id_producto',
'enlace' => 'productos',
'key_enlace' => 'id'
]
];
$modelo_tabla = 'Usuarios';
$tablas = 'usuarios';
$tablas_con_extensiones = $this->extensiones_join($extension_estructura, $modelo_tabla, $tablas);
// Resultado esperado: "LEFT JOIN usuarios AS u ON u.id_usuario = usuarios.id LEFT JOIN productos AS p ON p.id_producto = productos.id"
Código de la Función
private function extensiones_join(array $extension_estructura, string $modelo_tabla, string $tablas): array|string
{
$tablas_env = $tablas;
foreach($extension_estructura as $tabla=>$data){
if(!is_array($data)){
return $this->error->error(mensaje: 'Error data debe ser un array', data: $data, es_final: true);
}
$valida = (new validaciones())->valida_keys_sql(data: $data, tabla: $modelo_tabla);
if(errores::$error){
return $this->error->error(mensaje:'Error al validar data', data:$valida);
}
if(is_numeric($tabla)){
return $this->error->error(mensaje:'Error $tabla debe ser un texto', data:$tabla, es_final: true);
}
$tablas_env = $this->join_base(data: $data, modelo_tabla: $modelo_tabla,tabla: $tabla, tablas: $tablas);
if(errores::$error){
return $this->error->error(mensaje:'Error al generar join',data: $tablas);
}
$tablas = (string)$tablas_env;
}
return $tablas_env;
}