"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como lidar com transações dentro de funções externas no CodeIgniter?

Como lidar com transações dentro de funções externas no CodeIgniter?

Publicado em 2024-11-08
Navegar:640

How to Handle Transactions Within External Functions in CodeIgniter?

Tratamento de transações dentro de funções externas no CodeIgniter

Como você observou, o mecanismo padrão de tratamento de transações no CodeIgniter requer reversão manual em caso de erros ocorrendo dentro de funções externas. Para resolver esse problema, recomenda-se uma abordagem mais abrangente.

1. Encapsulando o tratamento de transações em um modelo:

De acordo com a arquitetura do CodeIgniter, as operações do banco de dados devem ser encapsuladas dentro da classe Model. Isso garante o tratamento adequado dos dados e a separação do model-view-controller (MVC). Funções externas devem servir apenas como utilitários ou auxiliares.

2. Captura de erros em funções externas:

Em funções externas, como insert_function e update_function2, implemente o tratamento de erros e retorne FALSE se ocorrer um erro. Isso acionará a reversão automática quando a transação for concluída.

Exemplo:

public function insert_function($data)
{
    if (!$this->db->insert('transactions_exercices', $data)) {
        return FALSE;
    }

    return TRUE;
}

3. Tratamento de exceções no controlador:

No controlador, onde a transação é iniciada, trate quaisquer exceções que possam surgir durante a transação e execute as ações necessárias, como exibir mensagens de erro ou registrar exceções.

Exemplo:

try {
    $this->db->trans_start();

    // Call external functions
    $result1 = $this->utils->insert_function($data);
    $result2 = $this->utils->update_function2($test);

    if ($result1 === FALSE || $result2 === FALSE) {
        throw new Exception('An error occurred.');
    }

    $this->db->trans_complete();
} catch (Exception $e) {
    $this->db->trans_rollback();
    // Handle the exception...
}

Observação: Certifique-se de que o modo estrito esteja desabilitado na configuração da sua transação para permitir grupos de transações independentes, conforme mencionado na solução fornecida.

Solução alternativa:

Como alternativa, você pode definir uma classe de transação personalizada que lida com interceptação de erros e reversão automática. Essa abordagem pode fornecer tratamento central de erros para todas as transações.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3