Transacciones

Hola tengo una duda de como implementar transacciones, verán: tengo que insertar un registro en un historial y modificar un registro en una tabla, todo eso debe hacerse como una unidad, si se completa todo es valido si no no tiene que guardar el registro ni modificar el otro… Desde ya muchas gracias y disculpen las molestias.

Hola.
Mirá, según mis escasos conocimientos, tengo entendido de que los componentes de persistencia tienen algo en ese sentido.
En el caso de que se trate de un datos-relación, actualiza todas las tablas involucradas o ninguna.

Si las tablas que necesitas actualizar no pueden conformar un datos relación, y cada una de ellas es, a lo sumo, un datos-tabla aislado, creo que no se puede encerrar varias invocaciones al método sincronizar dentro de una transacción. (Digo creo, porque a lo mejor eso cambió)

En una oportunidad que tuve que hacer algo similar a tu problema, lo que hice fue escribir la consulta de la manera tradicional:

begin transaction;
…;
…;
end transaction;

y ejecutarla a través del método consultar().

Un cordial saludo.

Hola Gente,

Jorge, lo que te explico Claudio es correcto, solo voy a hacer una pequeña aclaracion:

Esto que mencionas Claudio se puede hacer tambien, lo que hay que hacer es pedirle al persistidor que no use transacciones y luego abrirla manualmente, accediendo a la fuente de datos. Seria algo asi:


 $this->datos->tabla('tabla1')->get_persistidor()->desactivar_transaccion();           //Lo mismo con las otras tablas
try {
 toba::db('nombre_fuente')->abrir_transaccion();
 $this->datos->sincronizar();
......
 toba::db('nombre_fuente')->cerrar_transaccion();
} catch (toba_error_db $e) {
  toba::db('nombre_fuente')->abortar_transaccion();
}

De esa manera podes manejar una transaccion manual con datos_tabla individuales, o incluso si queres hacerlo con el metodo consultar.

Saludos