http://datamapper.wanwizard.eu/pages/transactions.html
DataMapper обрабатывает транзакции практически так же, как CodeIgniter (читай CodeIgniter Transactions), очевидно, потому что он использует те же методы!Единственное реальное отличие состоит в том, что вы будете вызывать методы транзакций непосредственно для ваших объектов DataMapper.
Это означает, что вместо:
$this->db->trans_begin();
Вы будете использовать:
$my_datamapper_object->trans_begin();
Все остальное, согласно документации Datamapper, идентично Codeigniter в отношении транзакций.Если вы посмотрите на исходный код библиотеки Datamapper, то увидите, что все вызовы trans_*()
являются просто функциями-обертками.Пример:
// Datamapper.php 1.8.dev line 3975
/**
* Trans Complete
*
* Complete a transaction.
*
* @return bool Success or Failure
*/
public function trans_complete()
{
return $this->db->trans_complete();
}
Метод trans_end()
не существует ни в Codeigniter, ни в Datamapper.Вы будете использовать trans_start()
и trans_complete()
для автоматических транзакций или для их вызова вручную:
http://codeigniter.com/user_guide/database/transactions.html
Выполнение транзакций вручную
Если выЕсли вы хотите запускать транзакции вручную, вы можете сделать это следующим образом:
$this->db->trans_begin();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
}
else
{
$this->db->trans_commit();
}
Просто замените $this->db
на ваш объект Datamapper.Например.
$u = new User($id);
$u->trans_begin();
$u->name = 'Jorge';
$u->save();
if ($u->trans_status() === FALSE)
{
$u->trans_rollback();
}
else
{
$u->trans_commit();
}