Recent Posts
- (02/24) Calling an Element from a Helper TAGS:CakephpWeb ProgrammingUsageTutorialExample
- (10/14) Forcing A Single Join in CakePHP PaginationTAGS:CakephpCakephp 13DatabaseErrorsHabtmMysqlMssqlWeb ProgrammingUsage
- (08/11) Inserting NOW() into MySQL Using CakePHPTAGS:CakephpDatabaseMysqlMssqlWeb ProgrammingUsage
- (08/07) Best PaginateCount for CakePHP - with Group By SupportTAGS:CakephpBehaviorsWeb ProgrammingUsageDatabaseExampleMysqlHabtmHack
- (04/03) CakePHP Error Messages Not Showing on FormTAGS:CakephpCakephp 13Web ProgrammingErrorsUsage
- (02/06) Sorting Paginated Results Using a Related Model Field in CakePHPTAGS:CakephpWeb ProgrammingUsageExample
- (11/02) Changing CakePHP's Model useTable on the FlyTAGS:CakephpWeb ProgrammingMysqlDatabaseExampleTutorial
- (10/18) The Funniest Error Message Ever - Thank You EclipseTAGS:EclipseWeb ProgrammingErrorsHumorWindowsUsageSoftwarePhpCakephp
Subscribe to my feed
MainelyDesign.com Blog
Transactional Support in CakePHP
Posted on 04/17/2009 at 11:50 am by Kevin Wentworth
Viewed 2,675 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!
