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

Nao consigo deletar um usuario

Gostaria de deletar somente quando a tarefa for vazia, se tiver o status preenchido, informar que tem tarefa vinculada ao usuario.

 public function destroy(int $id)
    {
        $removido = Usuario::find($id); 

        $tarefa = Tarefa::query()
            ->where('id_usuario', $removido) 
            ->get();

        if (isEmpty($tarefa)){
            $removido->delete();
            return response()
                ->json('Usuario removido com sucesso.', 200);
        }
        return response()
            ->json('existem tarefas vinculadas ao usuario', 404);
    }
}
7 respostas

Olá Ana!

Qual o retorno ou mensagem de erro quando executa essa função?

Ei Victor!

O erro é esse:

Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (cadastro.tarefas, CONSTRAINT tarefas_id_usuario_foreign FOREIGN KEY (id_usuario) REFERENCES usuarios (id)) (SQL: delete from usuarios where id = 17) (500 Internal Server Error) -->

Ana,

O erro está na linha onde você faz a busca pelas tarefas, você está comparando o campo id_usuario com o objeto todo que está armazenado em $removido.

Tente substituir por

$tarefa = Tarefa::query() ->where('id_usuario', $removido->id) ->get(); 

Ou você também poderia utilizar o $id que vem por parâmetro.

Nao deu :(

Dei uma alterada e meu codigo esta assim:


    public function destroy(int $id)
    {
        $removido = Usuario::find($id);  

        $tarefa = Tarefa::query()
            ->where('id_usuario', $id) 
            ->get('status');

                        //fazendo um var_dump aqui, ele esta pegando somente o status ok

        if (isEmpty($tarefa)){
            $removido->delete();
            return response()
                ->json('Usuario removido com sucesso.', 200);
        }

                    //o erro ocorre aqui! 
                   //Se o usuario tem uma tarefa cadastrada, queria que ele entrasse aqui: 

         return response()
            ->json('existem tarefas vinculadas ao usuario', 404);

    }

Mas ai, quando o usuario tem tarefa aparece o erro 1451.

Essa função "isEmpty", você que criou ou está utilizando o método do Laravel?

Tente subistituir por

if ($tarefa->isEmpty()){ // método disponivel em collections, conforme documentação do Laravel
    $removido->delete();
    return response()
        ->json('Usuario removido com sucesso.', 200);
}
solução!

    public function destroy(int $id)
    {
        $removido = Usuario::find($id);  

        $tarefa = Tarefa::query()
            ->where('id_usuario', $id)
            ->get('status')->first();

        if (is_null($tarefa))
        {
            $removido->delete();
            return response()
                ->json('Usuario removido com sucesso.', 200);
        }

         return response()
            ->json('existem tarefas vinculadas ao usuario', 404);

    }

Ja ia atualizar aqui, fiz assim e foi!

Muuuito obrigada pela paciencia e ajuda!!

Show!