Transacciones en CakePHP

Suongamos que tenemos un código para crear varios registros, pero no sabemos exactamente si todos esos registros van a poder crearse, y queremos que haya un rollback si eso no es posible.

En realidad CakePHP ya viene con una opción para hacer rollback en caso de error al modificar múltiples rows, pero acá lo hice manualmente:


public function miMetodoTransaccional($fkIds, $field1, $field2) {
$dataSource = $this->getDataSource();
$dataSource->begin($this);
$allOk = true;

foreach($fkIds as $fkId) {
$this->create();
$allOk = true & $this->save(array("fk_id" => $fkId, "field1" => $field1, "field2" => $field2));
}

if ($allOk) {
$dataSource->commit($this);
return true;
} else {
$dataSource->rollback($this);
return false;
}
}

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s