administrador.base.orm.inicializacion.init_upd - gamboamartin/administrador GitHub Wiki

init_upd

La función init_upd es una función pública que inicializa el proceso de actualización de un registro en un modelo. La función ajusta los campos que no deben ser actualizados, valida el registro a actualizar, y devuelve un objeto stdClass con los datos procesados. Si alguna validación falla, retorna un array de error detallado.

Signatura


final public function init_upd(int $id, modelo $modelo, array $registro, bool $valida_row_vacio = true): array|stdClass

Parámetros

  • int $id:
    El ID del registro que se va a actualizar. Debe ser un valor entero mayor que 0.

  • modelo $modelo:
    Una instancia de la clase modelo que representa el modelo en el cual se va a realizar la actualización. Este objeto debe tener propiedades como campos_no_upd, registro_upd, y registro_id.

  • array $registro:
    Un array que contiene los datos del registro que se va a actualizar. Cada clave representa el nombre de un campo y cada valor es el dato asociado a ese campo.

  • bool $valida_row_vacio (opcional):
    Un valor booleano que indica si se debe validar que $registro no esté vacío. Si es true, se realiza la validación; si es false, se omite. El valor por defecto es true.

Retorna

  • array|stdClass:
    Retorna un objeto stdClass que contiene los datos validados y listos para la actualización (registro_upd e id). En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Ajuste de campos no actualizables:

    • La función invoca campos_no_upd desde una instancia de la clase columnas para remover o ajustar los campos que no deben ser actualizados según lo definido en $modelo->campos_no_upd.
    • Si ocurre un error al ajustar los campos, se retorna un array de error.
  2. Asignación de datos en el modelo:

    • Se asigna el array de registro procesado a la propiedad registro_upd del modelo.
    • Se asigna el ID a la propiedad registro_id del modelo.
  3. Validación del registro:

    • Se llama a la función valida_upd_base desde una instancia de la clase validaciones para validar el registro antes de la actualización, utilizando el ID y los datos procesados.
    • Si ocurre un error durante la validación, se genera un mensaje de error detallado que incluye el registro original y procesado, y se retorna un array de error.
  4. Retorno de datos:

    • Si todas las validaciones son exitosas, se retorna un objeto stdClass con las propiedades registro_upd e id, que contienen los datos listos para ser actualizados en el modelo.

Ejemplos

```php
$id = 10;
$modelo = new modelo();
$registro = [
    'nombre' => 'John Doe',
    'email' => '[email protected]'
];

$resultado = $this->init_upd($id, $modelo, $registro);

// Resultado esperado:
// Un objeto stdClass con las propiedades `registro_upd` e `id` si todo es correcto.
// Un array de error si ocurre algún problema en el proceso.

Código de la Función

final public function init_upd(
        int $id, modelo $modelo, array $registro, bool $valida_row_vacio = true): array|stdClass
    {
        $registro_original = $registro;
        $registro = (new columnas())->campos_no_upd(campos_no_upd: $modelo->campos_no_upd, registro: $registro);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al ajustar camp no upd',data: $registro);
        }


        $modelo->registro_upd = $registro;
        $modelo->registro_id = $id;

        $valida = (new validaciones())->valida_upd_base(id:$id, registro_upd: $modelo->registro_upd,
            valida_row_vacio: $valida_row_vacio);
        if(errores::$error){
            $datos = serialize($registro);
            $registro_original = serialize($registro_original);
            $mensaje = "Error al validar datos del modelo ";
            $mensaje .= $modelo->tabla." del id $id";
            $mensaje .= " registro procesado $datos";
            $mensaje .= " registro original $registro_original";
            return $this->error->error(mensaje: $mensaje, data: $valida);
        }

        $data = new stdClass();
        $data->registro_upd = $modelo->registro_upd;
        $data->id = $modelo->registro_id;

        return $data;
    }