Создать и получить новый идентификатор из БД, но еще не зафиксированный CodeIgniter

В CodeIgniter,

Можно ли создать транзакцию (еще не совершено) и получить Я БЫ, и сделать если заявление, если утверждение правда, тогда будет привержен?

разные функции могут получить одну и ту же транзакцию?

например:

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

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

3

Решение

Josua, вы можете делать это внутри вашей модели, вместо того, чтобы вызывать модели из вашего контроллера.

структура таблицы

введите описание изображения здесь

контроллер

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

если вы попытаетесь выполнить это дважды, он вставит только первую вставку и обновит.

0

Другие решения

Что вы можете попробовать Запуск транзакций вручную.

Может следовать как:

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

Читать документы для получения дополнительной информации.

1

По вопросам рекламы [email protected]