| 
	
 | 
 Posted by Gordon on 12/18/07 17:31 
I am currently working on some code for my CMS that creates a site 
folder, then creates all the necessary child folders inside it.  The 
method that creates folders needs to insert into 2 tables so it wraps 
the operation in a transaction.  (psuedocode below) 
 
public function createItem ($parent) 
{ 
    $this -> database -> beginTransaction (); 
    $this -> database -> query ('INSERT INTO items (param1, 
param2 ... ) values (val1, val2 ... )'); 
    $newId = myMethodForGettingInsertId (); 
    $this -> database -> query ('INSERT INTO folders (id, param3 ... ) 
values ($newId, val3 ... )'); 
    $this -> database -> commit (); 
    return ($newId); 
} 
 
(the real code is obviously a lot more sophisticated and has all the 
error checking and rollbacks and what have you but the mock up code 
below is clearer regarding the intent of the method) 
 
In my site creating class I have something along the lines of 
 
public function createItem ($parent) 
{ 
    $this -> database -> beginTransaction (); 
    $newId = parent::createItem ($parent); 
    parent::createItem ($newId, 'images'); 
    parent::createItem ($newId, 'css'); 
    parent::createItem ($newId, 'other_stuff'); 
    $this -> database -> commit (); 
} 
 
This obviously causes an exception.  I can take the transaction code 
out of my folder class but the creation of a folder should be atomic. 
I could leave it out of the site creation class, but I really do need 
site creation to be atomic as well. 
 
Is there a way of determining that I am inside a transaction before 
attempting to start one?
 
  
Navigation:
[Reply to this message] 
 |