Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Como pegar o retorno do metodo flush

Ola gostaria de saber como pegar o retorno do flush() na alteração para saber se houve ou não alteração no banco.

6 respostas

Fala, Rodrigo. O método flush não retorna nada. Caso aconteça algum erro, ele lançará uma exceção.

;-)

Entendi tem algum método para saber se foi alterado o dado pra poder personalizar a mensagem de retorno de acordo. Grato pela atenção.

solução!

Consegui resolver com

$uow = $this->entityManager->getUnitOfWork();

    $uow->computeChangeSets();

    $changeset = $uow->getEntityChangeSet($prestador);

//nesse ponto verifica a alteracao com o relacionamento da classe categoria 
    $changeset2 = $prestador->getCategoriaServico()->getInsertDiff();
    $changeset3 = $prestador->getCategoriaServico()->getDeleteDiff();

   $this->entityManager->flush();

    if(empty($changeset) && empty($changeset2) && empty($changeset3)){
        $this->defineMensagem("warning", "Nenhuma alteração realizada");
    }else{
        $this->defineMensagem("success", "Prestador alterado com sucesso");
    }

Rodrigo, eu realmente não faria dessa forma. Faz muito mais sentido utilizar apenas um try catch:

try {
    // ...
    $this->entityManager->flush();
    $this->defineMensagem("success", "Prestador alterado com sucesso");
} catch (\Throwable $exception) {
    $this->defineMensagem("warning", "Nenhuma alteração realizada");
}

Pegar o UnitOfWork pode ser perigoso e nos dar "poderes" que não deveríamos ter.

Eu também não gostei muito da solução mas foi o único modo que eu encontrei pra saber se realmente foi alterado algo no banco, pois com o try catch eu não vou saber se foi alterado se enviar o formulario sem alteração o try catch não vai dar erro e não vou passar a msg correta de retorno. Se houver uma outra solução melhor com certeza tentarei implementar.

Ah, sua intenção é saber se no formulário, algum dado diferente do que já estava no banco foi enviado?

Dessa forma, o mais interessante seria fazer um find na entidade que você gostaria de alterar e comparar os valores dela com os valores enviados pelo formulário.

;-)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software