1
resposta

É possível aplicar controle de transação em um código com um loop foreach?

Estou com uma dúvida se é possível aplicar controle de transação em um código com um loop foreach? O meu código é o seguinte:

// Itere sobre o array para obter objetos em PHP
    foreach ($dados as $item) {
        $CD_Produto_Quant_Mensal = $item['CD_Produto_Quant_Mensal'];
        $Quantidade_Per_Capita = $item['Quantidade_Per_Capita'];
        $Quant_Vezes_Servido = $item['Quant_Vezes_Servido'];
        $Medida_Do_Produto = $item['Medida_Do_Produto'];
        $Categoria_Instituicao = $item['Categoria_Instituicao'];
        $Genero_Produto_Quant_Mensal = $item['Genero_Produto_Quant_Mensal'];
        
        $objeto = new Produto($CD_Produto_Quant_Mensal, "nao necessario", "descricao", 0, 0, 0, 0);

        // Faça algo com o objeto, por exemplo, adicioná-lo a um array de objetos
        $objetos[] = $objeto;

         // Instanciar e chamar o método para cadastrar cada objeto no banco de dados
         $objeto->gerarInfoQuantitativoMensal($CD_Produto_Quant_Mensal, $Quantidade_Per_Capita, $Quant_Vezes_Servido, $Medida_Do_Produto, $Categoria_Instituicao, $Genero_Produto_Quant_Mensal);
    }

Desde já agradeço a contribuição.

1 resposta

Olá, sim é possível.

Uma forma que encontrará em fóruns é utilizando o try .. catch para poder controlar a transação. Exemplo:

try {
    $pdo->beginTransaction(); // iniciando a transação
    
    // aqui vai o seu loop / foreach
    
    $pdo->commit(); // concluindo a transação
} catch (Exception $exception) {
    $pdo->rollback(); // Como algum evento de erro ocorreu, não realiza o commit e encerra a transação dando rollback
}