[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Igor Lagua Castro
Criador Igor Lagua Castro 02/02/2022

 

Boa tarde mestre.

Observei que aparece o erro 500 ao tentar registrar um e-mail que já está cadastrado no BD, então criei um código para retornar uma mensagem de erro se já existir o e-mail no banco, porem para isso eu precisei fazer 2 consultas no banco.

 

public function store(StoreRegisterUser $request)
    {
        $user = $this->model->where('email', $request->email)->first();
        $userSoftDeletes = $this->model->onlyTrashed()->where('email', $request->email)->first();

        if ($user || $userSoftDeletes) {
            throw ValidationException::withMessages([
                'email' => ['e-mail já cadastrado'],
            ]);
        }

        $data = $request->validated();
        $data['password'] = bcrypt($data['password']); // encrypt password
        $user = $this->model->create($data);
        $user->createToken($request->device_name)->plainTextToken;  
       
        return (new UserResource($user))
                    ->additional([
                        'token' => $user->createToken($request->device_name)->plainTextToken,  
                    ]);
    }

 

Queria ver se tem uma maneira de fazer com apenas uma consulta com um código mais limpo

 

Manager Carlos Ferreira 02/02/2022

Olá, Igor!
Tudo bem?

Você pode deixar essa validação no StoreRegisterUser

Lá você pode deixar:
'email' => [
    'required',
    'email',
    'exists:users,email,deleted_at,NULL',
],

---

Mais uma alternativa para validar inclusive e-mails deletados, seria criar um custom validator:
https://academy.especializati.com.br/aula/criar-validacao-personalizada-no-laravel-tenant-unique

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!