Ola gostaria de saber como pegar o retorno do flush() na alteração para saber se houve ou não alteração no banco.
Ola gostaria de saber como pegar o retorno do flush() na alteração para saber se houve ou não alteração no banco.
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.
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.
;-)