Recent Posts
- (09/10) Fixing Warning: the ECDSA host key for 'github.com' differs from the key for the IP addressTAGS:Web Server Admin
- (12/26) CakePHP 3 - Getting List of Column Definitions from a Table (like schema())TAGS:CakephpCake3
- (09/14) Change Order of Loaded Behaviors in CakePHP 3TAGS:Cake3CakephpWeb ProgrammingPhp
- (05/29) CakePHP 3 - Accept JSON Header Only Working When Debug FalseTAGS:Web ProgrammingCakephpCake3
- (05/23) Remove All Events from Google Calendar (Reset Calendar)TAGS:Web ProgrammingPhp
- (11/08) Google Tag Manager (GTM) Not Firing Default PageView EventTAGS:Web ProgrammingJavascriptGoogle Tag Manager
- (10/13) In PHP, how do you get __toString() Magic Method Result without calling echo?TAGS:CakephpCake3Cakephp 13PhpWeb Programming
- (11/14) Getting output from shell_exec() at all timesTAGS:Web ProgrammingWeb Server Admin
Subscribe to my feed
MainelyDesign.com Blog
Transactional Support in CakePHP
Posted on 04/17/2009 at 11:50 am by Kevin Wentworth
Viewed 14,732 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:
- $this->Model->begin();
- if(!$this->Model->save($this->data)) {
- $this->Model->rollback();
- } else {
- $this->Model->commit();
- }
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:
- function begin() {
- $db =& ConnectionManager::getDataSource($this->useDbConfig);
- $db->begin($this);
- }
- function commit() {
- $db =& ConnectionManager::getDataSource($this->useDbConfig);
- $db->commit($this);
- }
- function rollback() {
- $db =& ConnectionManager::getDataSource($this->useDbConfig);
- $db->rollback($this);
- }
That's it. Now in any model, you can use my code above, that didn't work at first.
Cheers,
-Kevin Wentworth
Tags for Transactional Support in CakePHP
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!