http://datamapper.wanwizard.eu/pages/transactions.html
DataMapperは、CodeIgniterとほぼ同じ方法でトランザクションを処理します(CodeIgniterトランザクションを読み取ります)。これは、明らかに同じメソッドを使用しているためです。唯一の本当の違いは、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();
}
メソッドはCodeignitertrans_end()
にも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();
}