Kohana

Database transacties in Kohana Framework

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 😉

Gepubliceerd door

Thomas

Vanaf 1999 zelfstandig ondernemer in de IT branche en sinds 2006 ook part-time barman. Geïnteresseerd in het internet, muziek, films en de Citroen CX.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *