Usandotransactions
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
- Biblioteca de banco de dados
- Classe de modelo
- Ajudante de URL
- 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
- 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 .