Ola gostaria de saber como pegar o retorno do flush() na alteração para saber se houve ou não alteração no banco.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
;-)