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 esfalse
. -
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
-
Inicialización de la propiedad
row
:- La función inicializa la propiedad
row
como un nuevo objetostdClass
, donde se almacenarán los datos del registro recuperado.
- La función inicializa la propiedad
-
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.
- La función verifica si
-
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.
- Si
-
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 elregistro_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.
- La función llama a
-
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.
- La función verifica que el número de registros devueltos (
-
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.
- La función recorre los campos del registro devuelto y los asigna a la propiedad
-
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];
}