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

obten_data

La función obten_data es una función pública que recupera un registro específico de la base de datos basado en su identificador (registro_id). La función valida la existencia y unicidad del registro, y luego lo almacena en la propiedad row de la instancia actual. Esta función es útil para obtener y manipular un solo registro de una tabla en la base de datos.

Signatura


final public function obten_data(
        array $columnas = array(), bool $columnas_en_bruto = false, array $extension_estructura = array(),
        array $hijo= array()): array

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.

  • 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 $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:
    Retorna un array que contiene los datos del registro solicitado. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Inicialización de la propiedad row:

    • La función inicializa la propiedad row como un nuevo objeto stdClass, donde se almacenarán los datos del registro recuperado.
  2. 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.
  3. 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.
  4. Obtención del registro por ID:

    • La función llama a obten_por_id() para recuperar el registro de la base de datos basado en el registro_id y las demás configuraciones proporcionadas.
    • Si ocurre un error durante la obtención del registro, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Validación de la existencia y unicidad del registro:

    • La función verifica que el número de registros devueltos (n_registros) sea exactamente 1.
    • Si no se encuentra ningún registro, o si se encuentran múltiples registros con el mismo ID, se genera un mensaje de error y se retorna un array con el mensaje de error.
  6. Asignación de los datos del registro a la propiedad row:

    • La función recorre los campos del registro devuelto y los asigna a la propiedad row de la instancia actual.
  7. Retorno del registro:

    • La función retorna un array que contiene los datos del registro solicitado.

Ejemplos

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

$resultado = $this->obten_data($columnas, $columnas_en_bruto, $extension_estructura, $hijo);

// Resultado esperado:
// Un array que contiene los datos del registro solicitado.
// Un array de error si ocurre algún problema.

Código de la Función

final public function obten_data(
        array $columnas = array(), bool $columnas_en_bruto = false, array $extension_estructura = array(),
        array $hijo= array()): array
    {
        $this->row = new stdClass();
        if($this->registro_id < 0){
            return  $this->error->error(mensaje: 'Error el id debe ser mayor a 0 en el modelo '.$this->tabla,
                data: $this->registro_id, es_final: true);
        }
        if(count($extension_estructura) === 0){
            $extension_estructura = $this->extension_estructura;
        }
        $resultado = $this->obten_por_id(columnas: $columnas, columnas_en_bruto: $columnas_en_bruto,
            extension_estructura: $extension_estructura, hijo: $hijo);

        if(errores::$error){
            return $this->error->error(mensaje: 'Error al obtener por id en '.$this->tabla, data: $resultado);
        }
        if((int)$resultado->n_registros === 0){
            return $this->error->error(mensaje: 'Error no existe registro de '.$this->tabla,data:  $resultado);
        }
        if((int)$resultado->n_registros > 1){
            return $this->error->error(
                mensaje: 'Error de integridad existe mas de un registro con el mismo id'.$this->tabla,
                data:  $resultado);
        }
        foreach($resultado->registros[0] as $campo=>$value){
            $this->row->$campo = $value;
        }
        return $resultado->registros[0];
    }