提问者:小点点

如何解决错误,SQLSTATE[23000]:完整性约束冲突:1062键“USERS_EMAIL_UNIQUE”的重复条目“mail@mail.com”


我有登记表。 当电子邮件在数据库中注册时,它会收到一条错误消息

SQLSTATE[23000]:违反完整性限制:1062“users_email_unique”项的重复项“mail@mail.com”

我想避免这个错误,而是得到一个警告,像“注册电子邮件”或类似的东西。 感谢任何帮助。 这是我的密码。

控制器/auth/registercontroller.php

<?php

namespace VMS\Http\Controllers\Auth;

use VMS\User;
use VMS\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

use RegistersUsers;

/**
 * Where to redirect users after registration.
 *
 * @var string
 */
protected $redirectTo = '/home';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest');
}

/**
 * Get a validator for an incoming registration request.
 *
 * @param  array  $data
 * @return \Illuminate\Contracts\Validation\Validator
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => 'required|min:4',
        'id_level' => 'required',
        'email' => 'required|min:4|email|unique:users',
        'password' => 'required',
        'confirm' => 'required|same:password',
        'g-recaptcha-response' => 'required|captcha',
    ]);
}
/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \VMS\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'id_level' => $data['id_level'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);

    
}

public function store(Request $request)
{
    $name = $request->input('name');
    $id_level = $request->input('id_level');
    $email        = $request->input('email');
    $password     = $request->input('password');

    $user = User::create([
        'name'      => $name,
        'id_level'      => $id_level,
        'email'     => $email,
        'password'  => Hash::make($password)
    ]);

    if($user) {
        return response()->json([
            'success' => true,
            'message' => 'Register Berhasil!'
        ], 201);
    } else {
        return response()->json([
            'success' => false,
            'message' => 'Register Gagal!'
        ], 400);
    }

}
}

user.php(模型)

<?php

namespace VMS;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'name', 'id_level', 'email', 'password', 
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'email_verified_at' => 'datetime',
];
protected $connection = 'vms_db';
}

register.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">

<title>SI-BeLa</title>

<!-- Scripts -->
<script src="{{ asset('js/app.js') }}" defer></script>

<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">

<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">

</head>


<body>
    <div id="app">
        <main class="py-4">
            <div class="container" style="margin: 0; min-width: 100%">
                <div class="row">
                    <div class="col-sm-6" style="text-align: ; padding-right: 20px;">
                        @guest
                            <a class="logo" href="{{ url('/') }}">{{ __('SI-BeLa') }}</a>
                        @endguest
                </div>

                <div class="col-sm-6" style="text-align: center;">
                    <h2 class="title">
                    <br><br>
                    <div style="text-align: center;">REGISTER
                    @if ($errors->any())
                    <div class="alert alert-danger">
                        <ul>
                            @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
                            @endforeach
                        </ul>
                    </div>
                    @endif
                        <form action="{{ route('register') }}" method="post">
                            {{ csrf_field() }}
                            <div class="cont_form_sign_up text-center">
                                <br>
                                <input type="text" class="form-control2" placeholder="Nama" id="name" name="name" pattern=".{4,}" required="required" title="Paling sedikit 4 karakter">
                                <p style="font-size:12px; color:red; text-align:left; padding-left: 17%;" >* Nama paling sedikit 4 Karakter</p>
                                <input type="hidden" class="form-control2" value="9" id="id_level" name="id_level">
                                <input type="email" class="form-control2" placeholder="E-mail" id="email" name="email" required="required" pattern="[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+">
                                <p style="font-size:12px; color:red; text-align:left; padding-left: 17%;" >* Email harus aktif & Pastikan email belum terdaftar di SIBeLa</p>
                                <input type="password" id="pw1" name="password" class="form-control2" placeholder="Password"
                                    required="required" pattern="(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}">
                                <p style="font-size:12px; color:red; text-align:left; padding-left: 17%;" >* Password paling sedikit 8 karakter serta mengandung angka, huruf kecil dan besar</p>
                                <input type="password" id="pw2" name="confirm" class="form-control2" placeholder="Confirm Password" required="required">
                                <div class="form-group">
                                    <center>
                                        {!! NoCaptcha::renderJs() !!}
                                        {!! NoCaptcha::display() !!}
                                        <span class="text-danger">{{ $errors->first('g-recaptcha-response') }}</span>
                                    </center>
                                </div>
                                <a class="btn btn-linkk" href="/loginpl">
                                    {{ __('Kembali ke login') }}
                                </a>
                                <br>
                                <button class="button gd-btn btn-2 btn-primaryy" onclick="cambiar_sign_up()"><strong>REGISTER</strong> </button>
                            </div>
                        </form>
                    </div>
                </h2>
                </div>

            </div>
        </div>
                    
    </main>
</div>

共2个答案

匿名用户

在将数据保存到数据库之前,必须验证数据。 之所以会出现此错误,是因为没有对唯一电子邮件进行验证。 您可以用下面的示例来解决这个问题:

public function register(Request $request) {
 $validatedData = $request->validate([
    'email' => ['required', 'max:250', 'unique:users,email'],
     //it means that the field email is required, can I have up to 250 characters, the column email in table users must be unique;
  ]);
//** Store logic goes here
}

匿名用户

您可以在存储区或create方法中捕获此异常。 示例:

public function store(Request $request)
{

    $name = $request->input('name');
    $id_level = $request->input('id_level');
    $email        = $request->input('email');
    $password     = $request->input('password');
    
    try {
    $user = User::create([
        'name'      => $name,
        'id_level'      => $id_level,
        'email'     => $email,
        'password'  => Hash::make($password)
    ]);
    } catch (\Exception $e) {
        $user =  null;
        //Error with $e->getMessage()
    }

if($user) {
    return response()->json([
        'success' => true,
        'message' => 'Register Berhasil!'
    ], 201);
} else {
    return response()->json([
        'success' => false,
        'message' => 'Register Gagal!'
    ], 400);
}