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 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 $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 objetostdClass
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
-
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
-
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.
- La función llama a
-
Aplicación de condiciones
WHERE
:- La función llama a
sql_where()
para añadir la cláusulaWHERE
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.
- La función llama a
-
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.
- La función llama a
-
Retorno del resultado:
- La función retorna el resultado de la consulta SQL, que es el registro solicitado como un objeto
stdClass
.
- La función retorna el resultado de la consulta SQL, que es el registro solicitado como un objeto
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;
}