gpt4 book ai didi

php - 我可以在使用 Datamapper/Codeigniter 提交事务后回滚事务吗?

转载 作者:搜寻专家 更新时间:2023-10-30 22:03:21 25 4
gpt4 key购买 nike

是否可以在提交后回滚事务?我问这个是因为在 Datamapper 文档中我看到了 trans_begin() 方法,但我没有找到 trans_end() 方法。 Codeigniter 有 trans_complete() 方法,所以我假设 Datamapper 可能有类似的方法。

我发现一件有趣的事是 this answer . Datamapper/Codeigniter 中有类似保存点的东西吗?

最佳答案

http://datamapper.wanwizard.eu/pages/transactions.html

DataMapper handles transactions in very much the same way that CodeIgniter does (read CodeIgniter Transactions), obviously because it uses the same methods! The only real difference is that you'll be calling the transaction methods directly on your DataMapper objects.

这意味着代替:

$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

Running Transactions Manually

If you would like to run transactions manually you can do so as follows:

$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();
}

关于php - 我可以在使用 Datamapper/Codeigniter 提交事务后回滚事务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7208439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com