2013-05-03 6 views
0

У меня есть 2 модели: modelA, модельB. Я хочу реализовать 2 операции, связанные с этими моделями в транзакции CI в myController. Пример:Вопрос о сделке в CodeIgniter

$this->db->trans_start(); 

$this->modelA->uodateA(conditions, item); 
$this->modelB->updateB(conditions, item); 
// with conditions and item is valid 
$this->db->trans_complete(); 

if ($this->db->trans_status() === FALSE) 
{ 
//handle when failed 
} 

Вот две операции в этих моделях:

public function updateA($where = array(), $item = array(), $auth = NULL){ 
     if(!is_array($item) && empty($item)) return FALSE; 

     if(is_numeric($where)){ 
      $where = array('vote_id'=>$where); 
     } 
     $this->db->where($where)->update($this->_table,$item); 


     return ($this->db->affected_rows() > 0); 
    } 


public function updateB($where = array(), $item = array(), $auth = NULL){ 
     if(!is_array($item) && empty($item)) return FALSE; 

      if(is_numeric($where)){ 
       $where = array('vote_id'=>$where); 
      } 

     $this->db->where($where)->update($this->_table,$item); 
     return ($this->db->affected_rows() > 0); 
    } 

Хотя updateB() неудачен (Ex: не может иметь запись для обновления, обновления ИНТ поле со значением строки ...), но trans_status() все равно возвращает true. Я хочу, если updateB() не удалось, он должен быть откатом. Как исправить? Большое спасибо

+0

Вы можете разместить свои коды модели тоже? –

+0

@Kishor: Я обновил – secretlm

+0

Пока у вас нет других операторов транзакций в ваших моделях, ваш образец кода должен работать нормально. –

ответ

0

Вы можете попробовать это один

$this->db->trans_begin(); 

$this->modelA->insertA(); 
$this->modelB->updateB(); 

if ($this->db->trans_status() === FALSE) 
{ 
    $this->db->trans_rollback(); 
} 
else 
{ 
    $this->db->trans_commit(); 
} 
+0

Я пробовал это, но это все еще не удалось. – secretlm

+0

Вы должны написать выше код в одной модели. Можете ли вы опубликовать свои оба вопроса? это поможет нам исправить ситуацию. – Sudz

+0

Я обновил свой код – secretlm

Смежные вопросы