Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Transações do Codeigniter


Usando transactions significa apoiar bancos de dados para inserir dados com segurança. Então, no Codeigniter, escrevemos todas as funções relacionadas ao banco de dados no Model não no Controlador. . E no seu segundo código (que não está funcionando) você apontou o modelo para lá.(utils ). Tão simples que tenho certeza que isso não vai funcionar. Porque não é uma inserção de dados com modelo e controlador paralelo. A transação deve ser codificada no modelo (Vou escrever no modelo na minha resposta ).

Carregue este material também
  1. Biblioteca de banco de dados
  2. Classe de modelo
  3. Ajudante de URL
  4. Sessão

Suposições

Em seu código você usou $data e $test como matriz. Então, suponho que haja dois arrays para inserir e atualizar dados.

Seus conjuntos de dados
$data = array(
   'title' => 'My title' ,
   'name' => 'My Name' ,
   'date' => 'My date'
);

$id = 007;
$test = array(
   'title' => $title,
   'name' => $name,
   'date' => $date
);

Seu código
$this->db->trans_start(); # Starting Transaction
$this->db->trans_strict(FALSE); # See Note 01. If you wish can remove as well 

$this->db->insert('table_name', $data); # Inserting data

# Updating data
$this->db->where('id', $id);
$this->db->update('table_name', $test); 

$this->db->trans_complete(); # Completing transaction

/*Optional*/

if ($this->db->trans_status() === FALSE) {
    # Something went wrong.
    $this->db->trans_rollback();
    return FALSE;
} 
else {
    # Everything is Perfect. 
    # Committing data to the database.
    $this->db->trans_commit();
    return TRUE;
}

Observações
  1. Por padrão, o Codeigniter executa todas as transações no Strict Mode. Quando omodo estrito está ativado , se você estiver executando vários grupos de transações, se um grupo falhar, todos os grupos serão revertidos. Se o modo restrito estiver desativado , cada grupo é tratado de forma independente , o que significa que a falha de um grupo não afetará nenhum outro .