从数据库创建并获取新 ID 但尚未提交 CodeIgniter
Create and Get the New ID from DB but not commited yet CodeIgniter
在 CodeIgniter 中,
是否可以创建事务(尚未提交)并获取ID,并进行if语句,如果语句true,那么它会committed?
不同的函数可以得到相同的交易?
例如:
$newID = $this->model->create();
if(!empty($newID)) {
$this->model->commit();
}else{
// cancel commit;
}
您可以尝试运行 手动交易。
可以如下:
$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();
}
阅读docs了解更多信息。
Josua 你可以在你的模型中做这些事情,而不是从你的控制器调用模型。
table结构
控制器
function index(){
$this->load->model('mtest');
$this->mtest->do_your_transaction();
}
型号mtest.php
class mtest extends CI_Model
{
function do_your_transaction()
{
$this->db->trans_start();
$id = $this->insert_query();
$this->update_query_using($id);
$this->db->trans_complete();
if($this->db->trans_status() === FALSE ) {
// do something falsy
}
else { /* do something if true. */ }
}
function insert_query()
{
$this->db->insert('tbl', array('name1' => "hoho", 'name2' => "yohoho", "count"=>0));
return $this->db->insert_id(); /* return last inserted. */
}
function update_query_using($id)
{
$this->db->where('id', $id)->update('tbl', array("count" => 100));
}
} // end of mtest class
如果你尝试执行两次,它只会插入第一次插入和更新。
在 CodeIgniter 中,
是否可以创建事务(尚未提交)并获取ID,并进行if语句,如果语句true,那么它会committed?
不同的函数可以得到相同的交易?
例如:
$newID = $this->model->create();
if(!empty($newID)) {
$this->model->commit();
}else{
// cancel commit;
}
您可以尝试运行 手动交易。
可以如下:
$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();
}
阅读docs了解更多信息。
Josua 你可以在你的模型中做这些事情,而不是从你的控制器调用模型。
table结构
控制器
function index(){
$this->load->model('mtest');
$this->mtest->do_your_transaction();
}
型号mtest.php
class mtest extends CI_Model
{
function do_your_transaction()
{
$this->db->trans_start();
$id = $this->insert_query();
$this->update_query_using($id);
$this->db->trans_complete();
if($this->db->trans_status() === FALSE ) {
// do something falsy
}
else { /* do something if true. */ }
}
function insert_query()
{
$this->db->insert('tbl', array('name1' => "hoho", 'name2' => "yohoho", "count"=>0));
return $this->db->insert_id(); /* return last inserted. */
}
function update_query_using($id)
{
$this->db->where('id', $id)->update('tbl', array("count" => 100));
}
} // end of mtest class
如果你尝试执行两次,它只会插入第一次插入和更新。