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();
}
person
Wesley Murch
schedule
26.08.2011