Kohana Framework heeft veel pluspunten maar zijn grootste minpunt is toch wel de handleiding. Die is, op z’n zachts gezegd, beknopt. Hierdoor blijft veel functionaliteit ongezien. Bij het doorspitten van de API en broncode kwam ik wat moois tegen: transacties binnen de database.

In deze post een kleine opzet voor het gebruik hiervan.

Probleem

Je wilt meerdere bewerkingen uitvoeren op verschillende tabellen middels één formulier. Wanneer één van de bewerkingen mislukt, moeten alle andere bewerkingen komen te vervallen.

Oplossing

Door het gebruik van een try-catch blok kun je bij fouten alle gedane mutaties makkelijk ongedaan maken.

$db = Database::instance();
$db->begin();

try {
  // insert, update, delete mutaties hier plaatsen
  // gebruik van ORM models is ook mogelijk
  $db->commit();
}
catch(Database_Exception $e) {
  $db->rollback();
}

Geef voor de try aan dat je wilt beginnen met de transactie

$db->begin();

Na het opgeven van de mutaties ga je ze uitvoeren

$db->commit();

Mocht de catch een fout oppakken, dan maak je alle wijzigingen ongedaan

$db->rollback();

In Kohana 2.x zijn deze functies niet ingebakken dus zul je ze handmatig moeten aanroepen.

$this->db->query("START TRANSACTION");
$this->db->query("COMMIT");
$this->db->query("ROLLBACK");

Succes en veel plezier ;-)