administrador.base.orm.modelo_base.extra_columns - gamboamartin/administrador GitHub Wiki

extra_columns

La función extra_columns es una función privada que genera columnas adicionales para una consulta SQL. Dependiendo del valor de $con_sq, la función puede generar subconsultas y columnas adicionales, las cuales se agregan a la consulta principal. Los resultados se devuelven como un objeto que contiene estas columnas adicionales.

Signatura


private function extra_columns(array $columnas, array $columnas_seleccionables, string $columnas_sql, bool $con_sq): stdClass|array

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 es true, se generarán; si es false, no se generarán.

Retorno

  • stdClass|array:
    Retorna un objeto stdClass que contiene dos propiedades:

    • sub_querys_sql: Una cadena con las subconsultas SQL generadas, o una cadena vacía si no se generaron subconsultas.
    • columnas_extra_sql: Una cadena con las columnas adicionales generadas, o una cadena vacía si no se generaron columnas adicionales.

    En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Inicialización de variables:

    • Se inicializan las variables $sub_querys_sql y $columnas_extra_sql como cadenas vacías para almacenar los resultados de las subconsultas y las columnas adicionales, respectivamente.
  2. Generación de subconsultas y columnas adicionales:

    • Si $con_sq es true, la función realiza los siguientes pasos:
      • Llama a la función sub_querys() para generar las subconsultas SQL. Si ocurre un error, se genera un mensaje de error y se retorna un array con el mensaje de error.
      • Llama a la función genera_columnas_extra() para generar las columnas adicionales. Si ocurre un error, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Retorno de los resultados:

    • Se crea un objeto stdClass que contiene dos propiedades:
      • sub_querys_sql: Contiene la cadena de subconsultas SQL generadas.
      • columnas_extra_sql: Contiene la cadena de columnas adicionales generadas.
    • El objeto stdClass es devuelto como resultado de la función.

Ejemplos

$columnas = ['total_pedidos', 'ultima_compra'];
$columnas_seleccionables = ['total_pedidos'];
$columnas_sql = 'id, nombre, email';
$con_sq = true;

$resultado = $this->extra_columns($columnas, $columnas_seleccionables, $columnas_sql, $con_sq);

// Resultado esperado:
// Un objeto stdClass con `sub_querys_sql` y `columnas_extra_sql` generados.

Código de la Función

private function extra_columns(
        array $columnas, array $columnas_seleccionables, string $columnas_sql, bool $con_sq): stdClass|array
    {
        $sub_querys_sql = '';
        $columnas_extra_sql = '';
        if($con_sq) {
            $sub_querys_sql = (new columnas())->sub_querys(columnas: $columnas_sql, modelo: $this,
                columnas_seleccionables: $columnas_seleccionables);
            if (errores::$error) {
                return $this->error->error(mensaje: 'Error al generar sub querys en ' . $this->tabla,
                    data: $sub_querys_sql);
            }

            $columnas_extra_sql = (new columnas())->genera_columnas_extra(columnas: $columnas, modelo: $this);
            if (errores::$error) {
                return $this->error->error(mensaje: 'Error al generar columnas', data: $columnas_extra_sql);
            }
        }

        $data = new stdClass();
        $data->sub_querys_sql = $sub_querys_sql;
        $data->columnas_extra_sql = $columnas_extra_sql;

        return $data;


    }