Transactional Support in CakePHP

Posted on 04/17/2009 at 11:50 am by Kevin Wentworth
Viewed 14,486 times | 0 comments

I just found out that CakePHP has transactional support built-in.  It should have been obvious, seeing how the saveAll() function has transaction support built-in too.  My first attempt at using it didn't work.  In my contoller/model I was doing the following:

  1. $this->Model->begin();
  2. if(!$this->Model->save($this->data)) {
  3.     $this->Model->rollback();
  4. } else {
  5.     $this->Model->commit();
  6. }

Based on the API and my limited knowledge of inheritance, I figured this would work.  It didn't.  I was a little stumped and was about to write methods in my model that I wanted to use, but decided to make use of app_model.php (great place for anything you will use over your entire application).  After peeking at the source for saveAll, I saw that they were instantiating a $db object and then using it to call the begin(), commit(), and rollback() functions.  It turns out it isn't available at the model level (as of 1.2 final) but you can add it to all your models very easily:

In app_model.php:

  1. function begin() {
  2.     $db =& ConnectionManager::getDataSource($this->useDbConfig);
  3.     $db->begin($this);
  4. }
  5. function commit() {
  6.     $db =& ConnectionManager::getDataSource($this->useDbConfig);
  7.     $db->commit($this);
  8. }
  9. function rollback() {
  10.     $db =& ConnectionManager::getDataSource($this->useDbConfig);
  11.     $db->rollback($this);
  12. }

That's it.  Now in any model, you can use my code above, that didn't work at first.


-Kevin Wentworth

Bookmark and Share

Tags for Transactional Support in CakePHP

Cakephp | Database

Comments for this Posting

No comments. Be the first to post a reply.

Sorry, comments are closed for this posting.

Please Email Kevin if you have any questions. Thanks!

Meet Site Avenger - Hosted Content Management System

Powered By: Site Avenger | Site Production: Saco Design