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