administrador.base.orm.modelo.obten_por_id - gamboamartin/administrador GitHub Wiki

obten_por_id

La función obten_por_id es una función privada que recupera un registro específico de la base de datos basado en su identificador (registro_id). La función construye una consulta SQL completa, incluyendo columnas, uniones, y condiciones WHERE, y luego ejecuta la consulta para obtener el registro deseado.

Signatura


private function obten_por_id(
        array $columnas = array(),array $columnas_by_table = array(), bool $columnas_en_bruto = false, 
        array $extension_estructura= array(), array $extra_join = array (), array $hijo = array()):array|stdClass

Parámetros

  • array $columnas (opcional):
    Un array que contiene los nombres de las columnas 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 es false.

  • 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. Si no se proporciona, se utilizará la estructura de extensión definida en la instancia actual. 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 $hijo (opcional):
    Un array que contiene la configuración de relaciones hijas que deben ser incluidas en la consulta. El valor por defecto es un array vacío.

Retorno

  • array|stdClass:
    Retorna un objeto stdClass que contiene el resultado de la consulta SQL, es decir, el registro solicitado. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Validación del identificador de registro:

    • La función verifica si registro_id en la instancia actual es mayor o igual a 0.
    • Si registro_id es menor que 0, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Configuración de la estructura de extensión:

    • Si $extension_estructura no se proporciona, se asigna la estructura de extensión definida en la instancia actual.
  3. Generación de la consulta SQL base:

    • La función llama a genera_consulta_base() para construir la consulta SQL inicial, que incluye las columnas, uniones, y demás configuraciones necesarias.
    • Si ocurre un error durante la generación de la consulta base, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Aplicación de condiciones WHERE:

    • La función llama a sql_where() para añadir la cláusula WHERE necesaria a la consulta, basada en el identificador del registro y otras configuraciones de seguridad.
    • Si ocurre un error durante la generación de la consulta con WHERE, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Ejecución de la consulta SQL:

    • La función llama a ejecuta_consulta() para ejecutar la consulta SQL construida y recuperar el registro solicitado.
    • Si ocurre un error durante la ejecución de la consulta, se genera un mensaje de error y se retorna un array con el mensaje de error.
  6. Retorno del resultado:

    • La función retorna el resultado de la consulta SQL, que es el registro solicitado como un objeto stdClass.

Ejemplos

$columnas = ['nombre', 'email'];
$columnas_by_table = ['usuarios'];
$columnas_en_bruto = false;
$extension_estructura = ['usuarios' => ['campo1', 'campo2']];
$extra_join = ['extra_campo' => 'valor_extra'];
$hijo = [];

$resultado = $this->obten_por_id($columnas, $columnas_by_table, $columnas_en_bruto, $extension_estructura, $extra_join, $hijo);

// Resultado esperado:
// Un objeto `stdClass` que contiene el registro solicitado.
// Un array de error si ocurre algún problema.

Código de la Función

private function obten_por_id(
        array $columnas = array(),array $columnas_by_table = array(), bool $columnas_en_bruto = false,
        array $extension_estructura= array(), array $extra_join = array (), array $hijo = array()):array|stdClass
    {
        if($this->registro_id < 0){
            return  $this->error->error(mensaje: 'Error el id debe ser mayor a 0',data: $this->registro_id,
                es_final: true);
        }
        if(count($extension_estructura)===0){
            $extension_estructura = $this->extension_estructura;
        }

        $consulta = $this->genera_consulta_base(columnas: $columnas, columnas_by_table: $columnas_by_table,
            columnas_en_bruto: $columnas_en_bruto, extension_estructura: $extension_estructura,
            extra_join: $extra_join, renombradas: $this->renombres);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar consulta base',data:  $consulta);
        }

        $consulta = (new _where())->sql_where(consulta: $consulta,modelo:  $this);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar consulta con where', data: $consulta);
        }

        $result = $this->ejecuta_consulta(consulta: $consulta, campos_encriptados: $this->campos_encriptados,
            hijo: $hijo);

        if(errores::$error){
            return $this->error->error(mensaje: 'Error al ejecutar sql', data: $result);
        }
        return $result;
    }