В CodeIgniter,
Можно ли создать транзакцию (еще не совершено) и получить Я БЫ, и сделать если заявление, если утверждение правда, тогда будет привержен?
разные функции могут получить одну и ту же транзакцию?
например:
$newID = $this->model->create();
if(!empty($newID)) {
$this->model->commit();
}else{
// cancel commit;
}
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
если вы попытаетесь выполнить это дважды, он вставит только первую вставку и обновит.
Что вы можете попробовать Запуск транзакций вручную.
Может следовать как:
$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();
}
Читать документы для получения дополнительной информации.