从DB创建并获取新ID但尚未提交CodeIgniter

时间:2015-02-22 06:48:37

标签: php database codeigniter commit autocommit

在CodeIgniter中,

是否可以创建事务(尚未提交)并获取 ID ,并且如果语句为<,则使 if语句 strong> true ,那么它将提交

不同的功能可以获得相同的交易吗?

例如:

$newID = $this->model->create();

if(!empty($newID)) {
      $this->model->commit();
}else{
     // cancel commit;
}

2 个答案:

答案 0 :(得分:1)

您可以尝试的是手动运行交易

可以按照:

$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 了解详情。

答案 1 :(得分:0)

Josua你可以在你的模型中做这些事情,而不是从控制器中调用模型。

表格结构

enter image description here

<强>控制器

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

如果你尝试执行两次,它只会插入第一个插入并更新。